Cet article présente la différence entre new self() et new static() en PHP Partagez-le avec tout le monde et laissez une note pour vous-même.
1.new static() est une nouvelle fonctionnalité introduite dans la version PHP5.3.
2. Qu'il s'agisse de new static() ou de new self(), un nouvel objet est nouveau.
3. Quelle est la différence entre les objets produits par new dans ces deux méthodes ? Pour parler franchement, l'objet produit par new est-il la même instance de classe ou une instance de classe différente ?
Afin d'explorer le problème ci-dessus, commençons par un simple morceau de code :
class Father { public function getNewFather() { return new self(); } public function getNewCaller() { return new static(); } } $f = new Father(); print get_class($f->getNewFather()); print get_class($f->getNewCaller());
Notez que la méthode get_class() dans le le code ci-dessus est utilisé. Obtenez le nom de la classe à laquelle appartient l'instance.
Le résultat ici est le suivant : quel que soit l'appel à getNewFather() ou getNewCaller(), une instance de la classe Father est renvoyée.
Le résultat imprimé est : FatherFather
À ce stade, il semble qu'il n'y ait aucune différence entre new self() et new static(). Continuons :
class Sun1 extends Father { } class Sun2 extends Father { } $sun1 = new Sun1(); $sun2 = new Sun2(); print get_class($sun1->getNewFather()); print get_class($sun1->getNewCaller()); print get_class($sun2->getNewFather()); print get_class($sun2->getNewCaller());
Regardez le code ci-dessus. Maintenant, la classe Father a deux sous-classes puisque les getNewFather() et getNewCaller() de la classe Father sont. public, donc les sous-classes héritent de ces deux méthodes.
Le résultat imprimé est : FatherSun1FatherSun2
Nous avons constaté que, qu'il s'agisse de Sun1 ou de Sun2, l'objet renvoyé en appelant getNewFather() est une instance de la classe Father, tandis que getNewCaller() renvoie le appeler Exemples de
C'est-à-dire que $sun1 renvoie une instance de la classe Sun1 et $sun2 renvoie une instance de la classe Sun2.
Maintenant, il me semble comprendre la différence entre new self() et new static().
Tout d'abord, leur différence ne peut se refléter que dans l'héritage. S'il n'y a pas d'héritage, alors il n'y a pas de différence entre les deux.
Ensuite, l'instance renvoyée par new self() est inchangée pendant des milliers d'années, peu importe qui l'appelle, elle renverra une instance de la même classe, tandis que new static() est déterminée par l'appelant.
L'appelant de $sun1->getNewCaller() ci-dessus est $sun1, n'est-ce pas ! $sun1 est une instance de la classe Sun1, donc ce qui est renvoyé est une instance de la classe Sun1. La même raison pour $sun2 ne sera pas répété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!