Late Static Binding : Analyse du « nouveau soi » et du « nouveau statique »
Lors de la transition d'une bibliothèque PHP de la version 5.3 à la version 5.2, un rencontre le problème de la liaison statique tardive, illustrée par des extraits de code tels que "return new static ($ options)". En PHP 5.2, une telle syntaxe n'est pas disponible. Cet article vise à explorer les nuances entre le « nouveau soi » et le « nouveau soi statique » et à déterminer si le « nouveau soi » fournit des fonctionnalités équivalentes dans un environnement PHP 5.2.
La distinction entre le « nouveau soi » et "new static"
En PHP 5.2, "self" fait référence à la classe dans laquelle le mot-clé "new" est explicitement déclaré. En revanche, "static", avec ses capacités de liaison statique tardives dans PHP 5.3, pointe vers la classe à partir de laquelle la méthode a été invoquée au sein d'une hiérarchie d'héritage.
Pour illustrer cette distinction, considérons la structure de classe suivante :
class A { public static function get_self() { return new self(); } public static function get_static() { return new static(); } } class B extends A {}
Dans cet exemple, les méthodes "get_self" et "get_static" sont héritées en classe B de la classe A. Invoquer "get_self" en B renverra une instance de classe A, car la référence "self" se lie à la classe où la méthode est définie. Cependant, invoquer "get_static" dans B renverra une instance de la classe B, car "static" dans une liaison statique tardive sera résolu en classe à partir de laquelle la méthode est appelée.
Application de "new static" vers PHP 5.2
Malheureusement, il n'existe pas de solution de contournement directe pour implémenter la "nouvelle fonctionnalité statique" de PHP 5.3 dans PHP 5.2. L'instruction "return new self ($options)" ne donnera pas les mêmes résultats que dans PHP 5.3, car "self" fait toujours référence à la classe où la méthode est définie plutôt qu'à la classe à partir de laquelle elle est invoquée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!