php8.5
Home/ Manual/ predefined / attributes/ The AllowDynamicProperties attribute

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.

Note

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.

Class synopsis

#[\Attribute(\Attribute::TARGET_CLASS)] AllowDynamicProperties { }

Examples

Dynamic properties are deprecated as of PHP 8.2.0, thus using them without marking the class with this attribute will emit a deprecation notice.

AllowDynamicProperties with non-existing property

php
<?php
class DefaultBehaviour { }

#[\AllowDynamicProperties]
class ClassAllowsDynamicProperties { }

$o1 = new DefaultBehaviour();
$o2 = new ClassAllowsDynamicProperties();

$o1->nonExistingProp = true;
$o2->nonExistingProp = true;
?>

82

output
Deprecated: Creation of dynamic property DefaultBehaviour::$nonExistingProp is deprecated in file on line 10

AllowDynamicProperties with non-existing property in inherited class

php
<?php
class DefaultBehaviour { }

#[\AllowDynamicProperties]
class ClassAllowsDynamicProperties { }

class InheritedClassAllowsDynamicProperties extends ClassAllowsDynamicProperties { }

$o1 = new DefaultBehaviour();
$o2 = new InheritedClassAllowsDynamicProperties();

$o1->nonExistingProp = true;
$o2->nonExistingProp = true;
?>

82

output
Deprecated: Creation of dynamic property DefaultBehaviour::$nonExistingProp is deprecated in file on line 12

See Also

Attributes overview

Construct

Source: language/predefined/attributes/allowdynamicproperties.xml · from the official PHP manual (php/doc-en)