Maison >développement back-end >tutoriel php >Migration PHP 5.2 vers 5.3 : quelle est la différence entre 'self' et 'static' dans la liaison statique tardive ?

Migration PHP 5.2 vers 5.3 : quelle est la différence entre 'self' et 'static' dans la liaison statique tardive ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-11 15:49:09613parcourir

PHP 5.2 to 5.3 Migration:  How Do

Late Static Binding : Comprendre "self" vs. "static"

Dans le contexte de la conversion d'une bibliothèque PHP 5.3 vers PHP 5.2, l'utilisation d'une liaison statique tardive via "return new static($options)" pose des problèmes de compatibilité. Le remplacer par "return new self($options)" ne donnera pas les mêmes résultats. PHP 5.2 ne prend pas en charge les liaisons statiques tardives.

Comprendre les différences

Pour clarifier, la différence entre « self » et « static » réside dans leurs liaisons de classe :

  • self : Se lie à la classe dans laquelle le mot-clé "new" est invoqué, quelle que soit la classe appelante réelle.
  • static: (PHP 5.3 ) : se lie à la classe sur laquelle la méthode est appelée. Si une sous-classe remplace la méthode, "static" fera référence à la sous-classe.

Exemple :

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

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

$a_self = A::get_self();
$b_self = B::get_self();

// $a_self is an object of class A
// $b_self is an object of class B

En conclusion, lors de la conversion de code qui utilise une liaison statique tardive vers PHP 5.2 , envisagez de réviser la logique pour supprimer cette fonctionnalité. "self" peut être utilisé comme solution de contournement dans certains cas, mais il est important de comprendre son comportement de liaison limité.

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!

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