Maison > développement back-end > tutoriel php > La différence entre new self() et new static() en php !

La différence entre new self() et new static() en php !

黄舟
Libérer: 2023-03-14 21:12:01
original
1311 Les gens l'ont consulté

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());
Copier après la connexion

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());
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal