El atributo AllowDynamicProperties

(PHP 8 >= 8.2.0)

Introducción

Este atributo se utiliza para marcar clases que permiten propiedades dinámicas.

Nota:

Aunque los atributos en sí no se heredan, el efecto del atributo AllowDynamicProperties sí se hereda. Las clases hijas de una clase marcada con este atributo también permitirán propiedades dinámicas, incluso si no declaran el atributo explícitamente.

Nota:

Este atributo se introdujo en PHP 8.2.0 como la forma explícita de permitir propiedades dinámicas. Crear una propiedad dinámica en una clase que no utiliza este atributo, y que no implementa __get() ni __set(), está deprecado.

Sinopsis de la clase

#[\Attribute(\Attribute::TARGET_CLASS)]
final class AllowDynamicProperties {
/* Métodos */
public function __construct()
}

Ejemplos

Ejemplo #1 AllowDynamicProperties con una propiedad dinámica

Para habilitar las propiedades dinámicas, añada #[\AllowDynamicProperties].

<?php
#[\AllowDynamicProperties]
class ValidExample { }

$obj = new ValidExample();
$obj->myDynamicProp = 1234;
?>

Ejemplo #2 AllowDynamicProperties con propiedad inexistente

A partir de PHP 8.2.0, la declaración es obligatoria a menos que la clase utilice este atributo. Crear una propiedad no declarada en una clase de este tipo emite un aviso de deprecación.

<?php
class InvalidExample { }

$obj = new InvalidExample();
$obj->myUnknownProperty = 1234;
?>

Resultado del ejemplo anterior en PHP 8.2:

Deprecated: Creation of dynamic property InvalidExample::$myUnknownProperty is deprecated in file on line 5

Ejemplo #3 AllowDynamicProperties con propiedad inexistente en clase heredada

<?php
class DefaultBehaviour { }

#[\AllowDynamicProperties]
class ClassAllowsDynamicProperties { }

class InheritedClassAllowsDynamicProperties extends ClassAllowsDynamicProperties { }

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

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

Resultado del ejemplo anterior en PHP 8.2:

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

Tabla de contenidos

+add a note

User Contributed Notes

There are no user contributed notes for this page.