The AllowDynamicProperties attribute
This attribute is used to mark classes that allow dynamic properties.
Intro
This attribute is used to mark classes that allow dynamic properties.
Although attributes themselves are not inherited, the effect of the AllowDynamicProperties attribute 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.
Class synopsis
Examples
AllowDynamicProperties with a dynamic property
To enable dynamic properties, add #[\AllowDynamicProperties].
<?php
#[\AllowDynamicProperties]
class ValidExample { }
$obj = new ValidExample();
$obj->myDynamicProp = 1234;
?>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;
?>82
Deprecated: Creation of dynamic property InvalidExample::$myUnknownProperty is deprecated in file on line 5AllowDynamicProperties 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;
?>82
Deprecated: Creation of dynamic property DefaultBehaviour::$nonExistingProp is deprecated in file on line 12See Also
Construct