Maison >développement back-end >tutoriel php >Explication détaillée de la liaison statique tardive en PHP orienté objet
Recommandé : "Tutoriel vidéo PHP"
Depuis PHP 5.3.0, PHP a ajouté une fonctionnalité appelée La fonction de liaison statique tardive est utilisée pour référencer des classes appelées statiquement dans la portée de l'héritage.
Pour être précis, le principe de fonctionnement de la liaison statique tardive est de stocker le nom de la classe dans l'"appel sans transfert" précédent. Lors d'un appel de méthode statique, le nom de la classe est celui explicitement spécifié (généralement sur le côté gauche de l'opérateur :: lors d'un appel de méthode non statique, il s'agit de la classe à laquelle appartient l'objet) ; Ce que l'on appelle le « transfert d'appel » fait référence aux appels statiques passés des manières suivantes : self::
, parent::
, static::
et forward_static_call()
. Vous pouvez utiliser la fonction get_called_class()
pour obtenir le nom de classe de la méthode appelée, et static :: indique sa portée.
Les appels dits renvoyés font référence à : les appels de méthode dans une classe Appel de transfert moyen 信息
(peut être compris comme des informations sur la pile d'appels)
Moment du transfert d'appel
appel parent
appel automatique
appel statique
forward_static_call()
Les appels dits sans transfert font référence à : la spécification explicite du nom de classe de l'appel statique ou l'appel via une instance d'objet (pseudo-objet)
<?phpclass A{public static function foo(){ static::who();}public static function who(){ echo __CLASS__ . "\n";}}class B extends A{public static function test(){ //非转发调用 A::foo(); //转发调用 parent::foo(); //转发调用 self::foo();}public static function who(){ echo __CLASS__ . "\n";}}class C extends B{public static function who(){ echo __CLASS__ . "\n";}}//非转发调用C::test();
Cette fonctionnalité est nommée « liaison statique tardive » d'un point de vue interne au langage. « Liaison tardive » signifie que static :: n'est plus résolu en classe dans laquelle la méthode actuelle est définie, mais est calculé au moment de l'exécution réelle. Elle peut également être appelée « liaison statique » car elle peut être utilisée pour (mais sans s’y limiter) des appels à des méthodes statiques.
Le principe de fonctionnement de la liaison statique tardive est de stocker le nom de la classe dans "l'appel sans transfert" précédent.
La signification de cette phrase est de savoir comment confirmer quelle classe est statique pendant l'exécution du programme. La règle de détermination est de prendre la dernière classe d'appel non transférée stockée
Scénario d'héritage d'instance unique
Classe abstraite et classe d'implémentation
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!