Maison > développement back-end > tutoriel php > Quelle est la différence entre new self() et new static()

Quelle est la différence entre new self() et new static()

小云云
Libérer: 2023-03-19 17:34:02
original
1873 Les gens l'ont consulté

Il existe de nombreuses fonctions en PHP que nous ne pouvons pas distinguer. Par exemple, quelle est la différence entre new self() et new static() ? Le coup n'est peut-être pas complètement expliqué. Bien sûr, il existe également des amis très puissants. Cet article partagera donc avec vous la différence entre new self() et new static() en PHP.

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 à partir de 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() du 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

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 :

Explication détaillée de new self() dans le tutoriel php_PHP

new static() et new self Les différences et similitudes entre (), staticself

À quoi sert new static() ? Comment y faire face

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