Comprendre les différences entre « New Self » et « New Static » en PHP
La conversion d'une bibliothèque PHP 5.3 en PHP 5.2 peut poser des défis , principalement en raison de différences de syntaxe. L'un des points de friction est l'utilisation de liaisons statiques tardives, comme en retour new static ($options).
Impact de la conversion vers un « nouveau soi »
Changer return new static($options) pour return new self($options) ne ne produira pas les mêmes résultats. La liaison statique tardive, introduite dans PHP 5.3, vous permet d'appeler les méthodes d'une classe en utilisant le mot-clé static, qui fait référence à la classe dans laquelle la méthode est appelée. Cependant, PHP 5.2 ne prend pas en charge cette fonctionnalité.
Différences clés entre « New Self » et « New Static »
Exemple :
Considérez le code suivant :
class A { public static function get_self() { return new self(); } public static function get_static() { return new static(); } } class B extends A {} echo get_class(B::get_self()); // A echo get_class(B::get_static()); // B echo get_class(A::get_self()); // A echo get_class(A::get_static()); // A
Dans cet exemple, l'invocation automatique dans get_self est liée à la classe A car la méthode est définie dans A. Cependant, la méthode statique l'invocation dans get_static est liée à la classe sur laquelle la méthode a été appelée, qui varie en fonction du contexte (par exemple, B lors du deuxième appel).
Conclusion
Pour PHP 5.2, il n'existe pas de solution directe pour les liaisons statiques tardives. Remplacer un nouveau statique par un nouveau soi ne fournira pas le même comportement. Comprendre la distinction entre ces mots-clés est crucial lors de la conversion du code PHP 5.3 vers des versions antérieures.
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!