Comprendre la distinction entre new self et new static
En PHP, self et static sont couramment utilisés dans les méthodes de classe pour instancier de nouveaux objets, notamment dans le cadre d’un héritage. Cependant, il existe des différences subtiles entre ces deux mots-clés.
new self vs. new static
Implications pour PHP 5.2
Lors de la conversion d'une bibliothèque PHP 5.3 en PHP 5.2, qui ne prend pas en charge la liaison statique tardive, le remplacement du nouveau static($ options) avec new self($options) peut ne pas donner les résultats escomptés. En effet, self fera toujours référence à la classe dans laquelle new est réellement écrit, tandis que static offre une flexibilité dans la résolution de la classe cible.
Exemple :
Considérez le code suivant dans PHP 5.2 :
class A { public static function create() { return new self(); } } class B extends A {} $object = B::create(); // $object is of class A, not B
En PHP 5.3, le même code aurait instancié un objet de classe B car static se serait résolu en classe d'appel.
Recommandations actuelles
Étant donné que PHP 5.2 n'est plus activement pris en charge, il n'est pas possible de trouver une solution de contournement à ce problème. Il est conseillé d'éviter complètement d'utiliser une liaison statique tardive pour des raisons de compatibilité.
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!