PHP 8.2 : les propriétés dynamiques sont obsolètes

Différents liens qui vous permettront de naviguer dans la documentation de ces technologies web
Répondre
Avatar du membre
mad
Responsable site
Responsable site
Messages : 158
Enregistré le : mar. 2 févr. 2021 16:42

PHP 8.2 : les propriétés dynamiques sont obsolètes

Message par mad »

Dans les classes PHP, il est possible de définir et de récupérer dynamiquement des propriétés de classe qui ne sont pas déclarées. Ces propriétés n'adhèrent pas à un spécifique (similaire aux propriétés typées) et nécessitent l'utilisation des méthodes magiques __get() et __set() pour empêcher ou contrôler efficacement la façon dont les propriétés dynamiques sont définies et récupérées.

Code : Tout sélectionner

class User {
    private int $uid;
}

$user = new User();
$user->name = 'Foo';
Dans l'extrait ci-dessus, la classe User ne déclare pas de propriété avec le nom name, mais comme les propriétés dynamiques sont autorisées, PHP permet de la définir.

Bien que les propriétés dynamiques offrent la flexibilité de créer des classes telles que des objets de valeur sans déclaration de classe stricte, elles ouvrent la possibilité de bogues potentiels et de comportements inattendus dans les applications. Par exemple, une faute de frappe dans une instruction qui définit une propriété peut passer inaperçue car PHP autorise silencieusement toutes les propriétés dynamiques.

Dans PHP 8.2 et versions ultérieures, la définition d'une valeur sur une propriété de classe non déclarée est obsolète et émet un avis d'obsolescence la première fois que la propriété est définie pendant la durée de vie de l'exécution de l'application.

Code : Tout sélectionner

class User {
    private int $uid;
}

$user = new User();
$user->name = 'Foo';
Obsolète : La création de la propriété dynamique User::$name est obsolète dans ... en ligne ...

La définition des propriétés à partir de la classe émet également l'avis d'obsolescence :

Code : Tout sélectionner

class User {
    public function __construct() {
        $this->name = 'test';
    }
}

new User();
Obsolète : La création de la propriété dynamique User::$name est obsolète dans ... en ligne ...

Il existe des cas d'utilisation légitimes de propriétés dynamiques, telles que des objets de valeur dérivés d'une réponse JSON dynamique ou des objets de configuration qui autorisent des valeurs arbitraires.

Idéalement, les classes doivent déclarer les propriétés dynamiques dans la classe pour éviter l'avis de dépréciation. Il n'est pas nécessaire de déclarer la propriété avec un type de propriété.

En savoir plus => https://php.developpez.com/actu/336283/ ... ynamiques/
Tracker => https://tracker.phpbb.com/projects/PHPB ... eated+DESC
Répondre