Maison  >  Article  >  développement back-end  >  Explication détaillée de la liaison statique tardive en PHP orienté objet

Explication détaillée de la liaison statique tardive en PHP orienté objet

藏色散人
藏色散人avant
2021-01-18 14:57:143002parcourir

Recommandé : "Tutoriel vidéo PHP"

Introduction

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.

Appels renvoyés et appels non renvoyés

Appels renvoyés

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()

      Appels sans transfert

      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)

      Analyse du code

      <?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();

      Liaison statique tardive

      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.

      Principe de mise en œuvre de la liaison statique tardive

      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

      Plus tard. liaison statique Application personnalisé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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer