Maison  >  Article  >  développement back-end  >  Analyse de la différence entre new self() et new static() en PHP

Analyse de la différence entre new self() et new static() en PHP

墨辰丷
墨辰丷original
2018-05-18 15:07:121636parcourir

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

new self() et new static()

Analyse et comparaison de PHP orienté objet La différence d'utilisation entre new self() et new static()

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn