
PHP, ¿qué son las propiedades dinámicas?
En estos últimos meses eh visto mucho sobre las propiedades dinámicas en PHP y donde existe la posibilidad de que quede desaparesca la ya la obsoleta con la versión 8.2, donde emitirian errores fatales para la proxima versión 9. Como veremos la documentación en un deprecate_dynamic_properties:RFC, y dicha desición presento mucha controversia entre la comunidad de programadores, pues viendo en las redes sociales (como Twitter, etc.).
¿Qué son las propiedades dinámicas?
Una propiedad es un atributo o variable la cual es declarada mediante la clase. Un simple ejemplo es, $str es una propiedad para la clase Some. Podemos declarar $str al principio de la misma, y es posible declarar la visibilidad (en este caso pública) y podemos declarar el tipo de propiedad (en este caso cadena):
class Some {
public string $str;
}
En los métodos de la clase, podemos acceder a la propiedad declarada:
Las propiedades dinámicas son propiedades que no se declaran en la clase, pero en el código de la clase, si se desea utilizar una propiedad no declarada tendra el siguiente resultado:
En el ejemplo anterior, en el método se busco acceder al constructor con la propiedad num, a través de $this->num. En este caso, PHP intentara crear dinámicamente la propiedad.
Este es un ejemplo con propiedades dinamicas aplicadas
Algunas etiquetas que esconden avisos de obsolencia temporalmente
La mayoría de los métodos internos no definitivos ahora requieren métodos de anulación para declarar un tipo de devolución compatible, de lo contrario, se emite un aviso obsoleto durante la validación de herencia. En caso de que el tipo devuelto no se pueda declarar para un método de anulación debido a problemas de compatibilidad entre versiones de PHP, se puede agregar un atributo ReturnTypeWillChange para silenciar el aviso de obsolescencia.
Consideremos que cuando explican en deprecate_dynamic_properties:RFC y se modifica para agregar un parámetro de num para ver un ejemplo con un error tipográfico mientras accede a la propiedad. Esto es un error "oculto" admitible en versiones inferiores de php, porque crees que realizaste una asignación correcta pero al final tienes un comportamiento inesperado debido al error tipográfico ejemplo usas (nu en lugar de num).
Con PHP 8.0 y 8.1, PHP permitira crear propiedades dinámicas.
Con PHP 8.2 tiene una advertencias durante la ejecución, pero permite crear la propiedad dinámica.
Con PHP 9.0 tendrás una excepción. Con errores fatales, indole de sintax error y otros para desalentar el avance de las practicas no aconsejadas.
Sugerimos que aplique verificaciones, aunque puede aplicar etiquetas para subsanarlo temporalmente hasta actualizar sus aplicativos, en caso de cualquier duda, puede usar PHPStan de manera que encuentren el mejor camino para realizar el refactorizado de sus aplicativos, sistemas o lo que requieran actualizar, dentro del lenguaje PHP.