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

小云云
Libérer: 2023-03-19 16:46:01
original
1257 Les gens l'ont consulté

Qu'il s'agisse de new static() ou de new self(), un nouvel objet est nouveau. Cet article vous présente principalement la différence entre new self() et new static() en PHP orienté objet. Les amis dans le besoin peuvent s'y référer.

La différence est la suivante :

Clarifiez d'abord la conclusion. En PHP, self pointe vers la classe qui définit la méthode actuellement appelée, et static pointe vers la classe qui appelle la méthode statique actuelle. .

Ensuite, un exemple sera utilisé pour prouver le résultat ci-dessus

class A 
{
 public static $_a = 'Class A';

 public static function echoProperty()
 {
 echo self::$_a . PHP_EOL;
 }
}

class B extends A 
{
 public static $_a = 'Class B';
}

$obj = new B();
B::echoProperty();//输出 Class A
Copier après la connexion

La raison pour laquelle c'est le cas est que self:: ou __CLASS__ est utilisé pour faire référence statiquement à la classe actuelle , selon la définition. Dans la classe où la méthode est appelée, modifiez la méthode echoProperty de la classe A ci-dessus pour devenir :

class A 
{
 public static $_a = 'Class A';

 public static function echoProperty()
 {
 echo static::$_a . PHP_EOL;
 }
}
//再次调用B::echoProperty将输出 'CLASS B'
Copier après la connexion

Afin d'éviter que la sous-classe ne remplace les propriétés statiques de la classe parent comme vu dans le premier exemple ci-dessus, utilisez les méthodes héritées pour toujours accéder aux propriétés statiques de la classe parent. PHP5.3 ajoute une nouvelle syntaxe : utilisez le mot-clé static au lieu du mot-clé self pour créer un point statique vers et revenir de. get_call_class(). La même classe, c'est-à-dire la classe qui appelle actuellement la méthode statique, ce mot-clé est également valide pour accéder à la méthode statique.

L'exemple suivant illustre mieux la différence entre new self() et new static() (cette dernière utilise la liaison statique tardive de PHP pour pointer vers la classe actuelle de la méthode appelante)

class A 
{
 public static function get_self() 
 {
 return new self();
 }

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

class B extends A {}

echo get_class(B::get_self()); // A
echo get_class(B::get_static()); // B
echo get_class(A::get_self()); // A
echo get_class(A::get_static()); // A
Copier après la connexion

Recommandations associées :

Aperçu des principes de conception orientée objet PHP

Connaissances pratiques de base de PHP orienté objet

Tutoriel d'exemple de concept de base orienté objet PHP

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