Властивості
Змінні, які є членами класу, називаються властивості. Також їх називають, використовуючи інші терміни, такі як поля, але в рамках цієї документації, ми будемо називати їх властивостями. Вони визначаються з використанням хоча б одного необов'язкового (за винятком 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]