«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Хуки свойств без PHP

Хуки свойств без PHP

Опубликовано 8 ноября 2024 г.
Просматривать:879

Property Hooks no PHP

В ноябре мы выпустим версию 8.4 нашего любимого PHP, а вместе с ней у нас появится новая функция, долгожданная сообществом: перехватчики свойств! Эта новая функция, вдохновленная другими языками, такими как C#, Swift и Kotlin, избавляет от хлопот, связанных с магическими методами __set() и __get().

Я собираюсь показать пример того, как в настоящее время иметь геттеры и сеттеры без необходимости создавать свойство как частное и создавать два новых метода с именами, отличными от имени свойства.

class Foo
{
    private String $bar;

    public function __set($name, $value)
    {
        $this->$name = $value . "!!!"; 
    }

    public function __get($name)
    {
         return "!!!" . $this->$name;
    }
}

Используя __get() и __set(), я могу оставить $bar общедоступным, когда устанавливаю значение и когда ищу значение, но с другой реализацией и без необходимости создавать методы с именами, отличными от свойства. В наглядном примере использование будет выглядеть так:

$foo = new Foo();

$foo->bar = "new release";
// aqui o valor que ficará salvo seria "new release!!!"

echo $foo->bar; // aqui retornaria "!!!new release!!!"

Теперь представьте, как будут выглядеть __get() и __set() с другими свойствами — полный беспорядок. Другой способ сделать это — создать метод getBar() и еще один метод setBar(), но при этом учитывается только одно свойство, и его использование будет отличаться от предыдущего:

class Foo
{
    private String $bar;

    public function setBar($value)
    {
        $this->bar = $value . "!!!"; 
    }

    public function getBar()
    {
         return "!!!" . $this->bar;
    }
}

$foo = new Foo();

$foo->setBar('new release');
// aqui o valor que ficará salvo seria "new release!!!"

echo $foo->getBar(); // aqui retornaria "!!!new release!!!"

Лично меня немного раздражает создание новых методов для этого варианта использования, я предпочитаю использовать прямой вызов свойства как для получения, так и для установки его значения. Эта новая функция призвана разрешить этот беспорядок и позволить вам определять методы get и set индивидуально вместе с объявлением в классе.

class Foo
{
    public String $bar {
        set (String $value) => $this->bar = $value . "!!!";
        get => "!!! . $this->bar";
    }
}

Этот новый код делает то же самое, но индивидуально, без создания новых методов или использования __get() и __set(), которые требуют обработки каждого свойства класса.

Теперь просто дождитесь запуска этой новой функции, которая должна появиться 21 ноября!

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/luciencorreia/property-hooks-no-php-84-2jld?1 Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3