(PHP 8 >= 8.2.0)
Атрибут маркирует классы, в которых разрешается объявлять динамические свойства.
Замечание: Разрешение объявлять динамические свойства, которое устанавливает атрибут
AllowDynamicProperties, наследуется, хотя сами атрибуты не наследуются. Подкласс разрешит добавлять свойства динамически, если родительский класс разметили атрибутом.
Динамические свойства устарели с PHP 8.2.0, поэтому объявление динамического свойства без маркировки класса атрибутом выдаст уведомление об устаревании.
Пример #1 Влияние атрибута AllowDynamicProperties на добавление динамических свойств
<?php
class DefaultBehaviour {}
#[\AllowDynamicProperties]
class ClassAllowsDynamicProperties {}
$o1 = new DefaultBehaviour();
$o2 = new ClassAllowsDynamicProperties();
$o1->nonExistingProp = true;
$o2->nonExistingProp = true;Результат выполнения приведённого примера в PHP 8.2:
Deprecated: Creation of dynamic property DefaultBehaviour::$nonExistingProp is deprecated in file on line 10
Пример #2 Влияние атрибута AllowDynamicProperties на добавление динамических свойств в дочерних классах
<?php
class DefaultBehaviour {}
#[\AllowDynamicProperties]
class ClassAllowsDynamicProperties {}
class InheritedClassAllowsDynamicProperties extends ClassAllowsDynamicProperties {}
$o1 = new DefaultBehaviour();
$o2 = new InheritedClassAllowsDynamicProperties();
$o1->nonExistingProp = true;
$o2->nonExistingProp = true;Результат выполнения приведённого примера в PHP 8.2:
Deprecated: Creation of dynamic property DefaultBehaviour::$nonExistingProp is deprecated in file on line 12