(PHP 8 >= 8.2.0)
This attribute is used to mark classes that allow dynamic properties.
Зауваження:
Although attributes themselves are not inherited, the effect of the
AllowDynamicPropertiesattribute is inherited. Child classes of a class marked with this attribute will also allow dynamic properties, even if they do not explicitly declare the attribute.
Зауваження:
This attribute was introduced in PHP 8.2.0 as the explicit way to allow dynamic properties. Creating a dynamic property on a class that does not use this attribute, and that does not implement __get() or __set(), is deprecated.
Приклад #1 AllowDynamicProperties with a dynamic property
To enable dynamic properties, add #[\AllowDynamicProperties].
<?php
#[\AllowDynamicProperties]
class ValidExample { }
$obj = new ValidExample();
$obj->myDynamicProp = 1234;
?>Приклад #2 AllowDynamicProperties with non-existing property
As of PHP 8.2.0, the declaration is required unless the class uses this attribute. Creating an undeclared property on such a class emits a deprecation notice.
<?php
class InvalidExample { }
$obj = new InvalidExample();
$obj->myUnknownProperty = 1234;
?>В PHP 8.2 поданий вище приклад виведе:
Deprecated: Creation of dynamic property InvalidExample::$myUnknownProperty is deprecated in file on line 5
Приклад #3 AllowDynamicProperties with non-existing property in inherited class
<?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