Асиметрична видимість властивостей у PHP 8.4

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 21 листопада, 2024
PHP 8.4 вводить революційну функцію — асиметричну видимість властивостей, яка дозволяє встановлювати різний рівень доступу для читання та запису. Дізнайтеся, як це змінить вашу роботу з об'єктно-орієнтованим програмуванням у PHP!

Вихід PHP 8.4 заплановано на завтра, і однією з цікавих новинок є асиметрична видимість властивостей. У PHP 8.4 властивості можуть мати асиметричний рівень видимості, що дозволяє визначати різний доступ для читання та запису. Приклад із документації:

class Book
{
    public function __construct(
        public private(set) string $title,
        public protected(set) string $author,
        protected private(set) int $pubYear,
    ) {}
}

class SpecialBook extends Book
{
    public function update(string $author, int $year): void
    {
        $this->author = $author; // OK
        $this->pubYear = $year; // Fatal Error
    }
}

$b = new Book('How to PHP', 'Peter H. Peterson', 2024);

echo $b->title; // How to PHP
echo $b->author; // Peter H. Peterson
echo $b->pubYear; // Fatal Error

Пропонуючи публічний доступ до властивості, але забороняючи її (set) доступ публічно, ви можете помітити, що $title та $author доступні для загального користування. Проте з властивостями можна мати детальніший контроль щодо їхніх установлених значень (за допомогою protected або private). Для властивостей класу обов’язковим є задання типу, щоб встановити окрему видимість, а set повинен бути таким самим або більш строгим, ніж get.

Слідкуйте за нашим постом про PHP 8.4, щоб отримувати оновлення про вихід версії PHP 8.4 21 листопада!