Maison  >  Article  >  développement back-end  >  Explication détaillée de PHP new static et new self

Explication détaillée de PHP new static et new self

高洛峰
高洛峰original
2017-02-21 15:29:431197parcourir

Utilisez self:: ou __CLASS__ pour faire une référence statique à la classe actuelle, selon la classe dans laquelle la méthode actuelle est définie : l'utilisation de static:: n'est plus analysée dans la classe dans laquelle la méthode actuelle est définie, mais est calculé au moment de l'exécution réelle. Elle peut également être appelée « liaison statique » car elle peut être utilisée pour (mais sans s’y limiter) des appels à des méthodes statiques.

On m'a récemment posé une petite question dans les commentaires d'une vidéo : y a-t-il des considérations particulières lors du choix d'utiliser static au lieu de self ici ? Ou nous pouvons changer la question comme ceci :

Que sont exactement le nouveau statique et le nouveau moi de PHP ?

En fait, cela devrait être très clair si nous regardons un exemple :

class Father {

 public static function getSelf() {
  return new self();
 }

 public static function getStatic() {
  return new static();
 }
}

class Son extends Father {}

echo get_class(Son::getSelf()); // Father
echo get_class(Son::getStatic()); // Son
echo get_class(Father::getSelf()); // Father
echo get_class(Father::getStatic()); // Father

Notez cette ligne ici get_class(Son::getStatic()); renvoie la classe Son, qui peut se résumer ainsi :

nouveau soi

1 .self renvoie la classe dans laquelle se trouve le mot-clé new self dans new Par exemple, dans cet exemple :

public static function getSelf() {
  return new self(); // new 关键字在 Father 这里
 }

<.> revient toujours

. Father

nouveau statique

2.

Basé sur ce qui précède, c'est un peu plus intelligent : static renverra la classe qui exécute static, comme new static() exécutant Son Ce qui est renvoyé est get_class(Son::getStatic()), Son exécute Father et ce qui est renvoyé est get_class(Father::getStatic())Father

En l'absence d'héritage, on peut considérer que

et new self. renvoie le même résultat. new static

Conseils : Vous pouvez utiliser un bon IDE pour lire directement les commentaires. Par exemple, PhpStorm :

PHP new static 和 new self详解

Pour des articles plus détaillés sur PHP new static et new self, veuillez faire attention au site Web PHP 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