The AllowDynamicProperties attribute

(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 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.

ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ огляд класу

#[\Attribute(\Attribute::TARGET_CLASS)]
final class AllowDynamicProperties {
/* ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ */
public function __construct()
}

ΠŸΡ€ΠΈΠΊΠ»Π°Π΄ΠΈ

ΠŸΡ€ΠΈΠΊΠ»Π°Π΄ #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

ΠŸΡ€ΠΎΠ³Π»ΡΠ½ΡŒΡ‚Π΅ Ρ‚Π°ΠΊΠΎΠΆ

Attributes overview

Зміст

οΌ‹add a note

User Contributed Notes

There are no user contributed notes for this page.