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

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

藏色散人
Libérer: 2023-04-07 17:42:01
avant
2821 Les gens l'ont consulté

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__ sont utilisés pour faire référence statiquement à la classe actuelle, selon sur la définition de la méthode appelée Dans la classe où elle se trouve, modifier 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 vue dans le premier exemple ci-dessus n'écrase les propriétés statiques de la classe parent, utilisez le mot-clé hérité. La méthode accède toujours 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 faire pointer static vers la même classe renvoyée. par get_call_class() , 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

Pour pour plus de connaissances sur PHP, veuillez visiter le Site Web PHP chinois !

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:
php
source:segmentfault.com
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