Властивості

Змінні, які є членами класу, називаються властивості. Також їх називають, використовуючи інші терміни, такі як поля, але в рамках цієї документації, ми будемо називати їх властивостями. Вони визначаються з використанням хоча б одного необов'язкового (за винятком readonly-властивостей) модифікатора (наприклад, Область видимості Ключове слово static або, починаючи з PHP 8.1.0, readonly), починаючи з PHP 7.4, за яким слідує необов'язкове оголошення типу, за яким слідує звичайне оголошення змінної. Це оголошення може містити ініціалізацію, але ця ініціалізація має бути постійним значенням

Зауваження :

Застарілий спосіб оголошення властивостей класу – використання ключового слова var замість модифікатора.

Зауваження: Властивість, оголошена без модифікатора Область видимості , буде оголошено як public

У межах методів класу доступ до нестатичних властивостей можна отримати за допомогою -> (об'єктного оператора): $this->property (де property - Ім'я якості). Доступ до статичних властивостей здійснюється за допомогою :: (подвійного двокрапки): self::$property. Додаткову інформацію про відмінність статичних та нестатичних властивостей дивіться у розділі Ключове слово static

Псевдозмінна $this доступна всередині будь-якого методу класу, коли цей метод викликається з контексту об'єкта. $this - значення об'єкта, що викликає.

Приклад #1 Визначення властивостей

Loading...

Зауваження :

Існують різні функції для обробки класів та об'єктів. Дивіться довідник з функцій для класів/об'єктів

Оголошення типів

Починаючи з PHP 7.4.0, визначення властивостей можуть містити Оголошення типів, за исключением типаcallable

Приклад #2 Приклад використання типизованих властивостей

Loading...

Результат виконання наведеного прикладу:

int(1234)
NULL

Перед зверненням до типізованої властивості у нього має бути задано значення, інакше буде викинуто виняток Error

Приклад #3 Звернення до властивостей

Loading...

Результат виконання наведеного прикладу:

string(8) "triangle"
int(3)
string(6) "circle"

Fatal error: Uncaught Error: Typed property Shape::$numberOfSides must not be accessed before initialization

Readonly-властивості

Починаючи з PHP 8.1.0, властивість можна оголосити за допомогою модифікатора readonlyщо запобігає зміні властивості після ініціалізації.

Приклад #4 Приклади readonly-властивостей

Loading...

Зауваження :

Модифікатор readonly може застосовуватися тільки до типізованим властивостям. Readonly-властивість без обмежень типу можна створити за допомогою типу Mixed

Зауваження :

Статичні реально-властивості не підтримуються.

Readonly-властивість можна ініціалізувати лише один раз і тільки з області, в якій вона була оголошена. Будь-яке інше присвоєння чи зміна властивості призведе до виключення Error

Приклад #5 Неправильна ініціалізація readonly-властивостей

Loading...

Зауваження :

Вказівка ​​явного значення за умовчанням для readonly-властивостей не допускається, тому що readonly-властивість зі значенням за замовчуванням, по суті, те саме, що і константа і тому не особливо корисно.

Loading...

Зауваження :

Readonly-властивості не можуть бути знищені за допомогою unset() після їхньої ініціалізації. Однак можна знищити readonly-властивість до ініціалізації з області, в якій було оголошено властивість.

Модифікації не обов'язково є простими присвоєннями, все наведене нижче також призведе до виключення Error :

Loading...

Однак реально-властивості не виключають внутрішньої мінливості. Об'єкти (або ресурси), що зберігаються в readonly-властивості, як і раніше, можуть бути змінені всередині:

Loading...

Динамічні властивості

При спробі привласнити неіснуючу властивість об'єкту (object), PHP автоматично створить відповідну властивість. Ця динамічно створена властивість буде доступна тільки для цього екземпляра класу.

Увага

Динамічні властивості застаріли починаючи з PHP 8.2.0. Натомість рекомендується оголошувати властивість. Для роботи з довільними іменами властивостей, клас має реалізувати магічні методи __get() і __set(). У крайньому випадку клас можна позначити атрибутом #[\AllowDynamicProperties]