Maison > développement back-end > tutoriel php > PHP `self` vs `static` : quand est-ce que `new static()` diffère de `new self()` ?

PHP `self` vs `static` : quand est-ce que `new static()` diffère de `new self()` ?

Susan Sarandon
Libérer: 2024-12-14 00:15:09
original
520 Les gens l'ont consulté

PHP `self` vs. `static`: When Does `new static()` Differ from `new self()`?

Comprendre la distinction entre new self et new static

En PHP, self et static sont couramment utilisés dans les méthodes de classe pour instancier de nouveaux objets, notamment dans le cadre d’un héritage. Cependant, il existe des différences subtiles entre ces deux mots-clés.

new self vs. new static

  • self fait référence à la classe dans laquelle le nouveau mot-clé est défini , compte tenu de la portée actuelle et de la hiérarchie d'héritage.
  • static, introduit dans PHP 5.3, fait référence à la classe sur laquelle la méthode appelant new a été appelée, quel que soit son héritage hiérarchie.

Implications pour PHP 5.2

Lors de la conversion d'une bibliothèque PHP 5.3 en PHP 5.2, qui ne prend pas en charge la liaison statique tardive, le remplacement du nouveau static($ options) avec new self($options) peut ne pas donner les résultats escomptés. En effet, self fera toujours référence à la classe dans laquelle new est réellement écrit, tandis que static offre une flexibilité dans la résolution de la classe cible.

Exemple :

Considérez le code suivant dans PHP 5.2 :

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

class B extends A {}

$object = B::create(); // $object is of class A, not B
Copier après la connexion

En PHP 5.3, le même code aurait instancié un objet de classe B car static se serait résolu en classe d'appel.

Recommandations actuelles

Étant donné que PHP 5.2 n'est plus activement pris en charge, il n'est pas possible de trouver une solution de contournement à ce problème. Il est conseillé d'éviter complètement d'utiliser une liaison statique tardive pour des raisons de compatibilité.

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal