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

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

小云云
小云云original
2018-03-31 13:28:231385parcourir

Cet article partage principalement avec vous la différence entre new self() et new static() en PHP. J'espère qu'il pourra vous aider.

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 code simple :

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());注意,上面的代码get_class()方法是用于获取实例所属的类名。

Le résultat ici est : que vous appeliez getNewFather() ou getNewCaller(), le résultat renvoyé est Father . Instance de classe.

Le résultat imprimé est : FatherFather

À ce stade, il semble qu'il n'y ait aucune différence entre new self() et new static(). Nous continuons à descendre :

 Sun1  Sun2  (-> (-> (-> (->getNewCaller());看上面的代码,现在这个Father类有两个子类,由于Father类的getNewFather()和getNewCaller()是public的,所以子类继承了这两个方法。

Le résultat imprimé est : FatherSun1FatherSun2

Nous constatons que qu'il s'agisse de Sun1 ou de Sun2, l'objet renvoyé en appelant getNewFather() est une instance du Classe père. Et getNewCaller() renvoie l’instance de l’appelant.

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.

$sun1->L'appelant de getNewCaller() 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.

D'accord, c'est tout pour l'instant sur la différence entre new self() et new static() en PHP. J'espère que cela sera utile aux lecteurs. compréhension. S'il y a quelque chose qui ne va pas, n'hésitez pas à le lancer.

Recommandations associées :

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

new self( ) en php ) et new static()!

Introduction aux différences et à l'utilisation entre new static() et new self()

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