Maison > développement back-end > tutoriel php > Migration PHP 5.2 vers 5.3 : quelle est la différence entre `new self()` et `new static()` ?

Migration PHP 5.2 vers 5.3 : quelle est la différence entre `new self()` et `new static()` ?

Barbara Streisand
Libérer: 2024-12-18 15:40:12
original
643 Les gens l'ont consulté

PHP 5.2 to 5.3 Migration: What's the Difference Between `new self()` and `new static()`?

Comprendre les différences entre « New Self » et « New Static » en PHP

La conversion d'une bibliothèque PHP 5.3 en PHP 5.2 peut poser des défis , principalement en raison de différences de syntaxe. L'un des points de friction est l'utilisation de liaisons statiques tardives, comme en retour new static ($options).

Impact de la conversion vers un « nouveau soi »

Changer return new static($options) pour return new self($options) ne ne produira pas les mêmes résultats. La liaison statique tardive, introduite dans PHP 5.3, vous permet d'appeler les méthodes d'une classe en utilisant le mot-clé static, qui fait référence à la classe dans laquelle la méthode est appelée. Cependant, PHP 5.2 ne prend pas en charge cette fonctionnalité.

Différences clés entre « New Self » et « New Static »

  • Self : Fait référence à la classe dans laquelle est écrit le nouveau mot-clé.
  • Statique :Dans les liaisons statiques tardives (PHP 5.3 ), font référence à la classe sur laquelle la méthode a été appelée.

Exemple :

Considérez le code suivant :

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

Dans cet exemple, l'invocation automatique dans get_self est liée à la classe A car la méthode est définie dans A. Cependant, la méthode statique l'invocation dans get_static est liée à la classe sur laquelle la méthode a été appelée, qui varie en fonction du contexte (par exemple, B lors du deuxième appel).

Conclusion

Pour PHP 5.2, il n'existe pas de solution directe pour les liaisons statiques tardives. Remplacer un nouveau statique par un nouveau soi ne fournira pas le même comportement. Comprendre la distinction entre ces mots-clés est crucial lors de la conversion du code PHP 5.3 vers des versions antérieures.

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