Nouveau soi ou nouveau statique en PHP : compatibilité et différences
La conversion du code PHP 5.3 en PHP 5.2 présente souvent des défis en raison de changements syntaxiques . L'un de ces défis provient de l'utilisation de liaisons statiques tardives, en particulier de l'utilisation de return new static($options);. Remplacer static par self dans ce contexte peut ne pas donner les mêmes résultats.
Comprendre la différence
self fait référence à la classe dans laquelle le nouveau mot-clé est défini, tandis que static , introduit dans la fonctionnalité de liaisons statiques tardives de PHP 5.3, fait référence à la classe dans la hiérarchie sur laquelle la méthode est invoqué.
Conséquences de l'utilisation de new self dans PHP 5.2
Le remplacement de static par self dans PHP 5.2 entraînera un comportement ambigu. self fera toujours référence à la classe dans laquelle la méthode est définie, quelle que soit la classe dans laquelle elle est invoquée. Cela peut conduire à une instanciation d'objet incorrecte et à des incohérences.
Exemple
Considérez le code suivant :
class Animal { public static function getInstance() { return new self(); } } class Dog extends Animal { public static function getInstance() { return new static(); } }
En PHP 5.3, appeler Dog : :getInstance() renverrait une instance de Dog, tandis qu'appeler Animal::getInstance() renverrait une instance de Animal.
Cependant, en PHP 5.2, les deux appels renverraient une instance d'Animal car self dans les deux méthodes ferait référence à Animal.
Conclusion
Bien que new self et new static soient équivalents dans PHP 5.3, ils diffèrent considérablement dans PHP 5.2. La conversion de new static($options) en new self($options) dans PHP 5.2 peut donner des résultats incorrects, et il n'existe aucune solution de contournement connue pour ce problème.
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!