Cet article présente principalement la différence entre new self() et new static() en PHP. Il a une certaine valeur de référence. Ceux qui sont intéressés peuvent en apprendre davantage
1.new static() est New. fonctionnalités introduites dans la version PHP 5.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 get_class() méthode du code ci-dessus Est utilisée pour obtenir 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());
En regardant le code ci-dessus, la classe Father a maintenant deux sous-classes, en raison de getNewFather() et getNewCaller du Father class () est 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
Autrement dit, $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.
Recommandations associées :
Quelle est la différence entre new self() et new static() en PHP Quelle est la différence entre
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!