Maison  >  Article  >  développement back-end  >  [classes et objets php] liaison statique tardive

[classes et objets php] liaison statique tardive

不言
不言original
2018-04-17 14:00:461271parcourir

Le contenu de cet article concerne la liaison statique tardive [classes et objets php], qui a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

Liaison statique tardive <.>

PHP 5.3.0

Utilisé pour : Références à des classes appelées statiquement dans la portée de l'héritage

Comment ça marche :

  • stocké Le nom de classe du dernier "appel sans renvoi".

  • 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.
  • Transfert d'appel : appel statique via self::, parent::, static::, forward_static_call() (appel d'une méthode statique).
Vous pouvez utiliser la fonction get_call_class() pour obtenir le nom de classe de la méthode appelée, et static:: indique sa portée.


Cette fonctionnalité est nommée "Late Static Binding" d'un point de vue interne au langage.

"Liaison tardive" signifie que static:: n'est plus résolu dans la classe dans laquelle la méthode actuelle est définie, mais est calculé au moment de l'exécution réelle.

On peut également l'appeler « liaison statique » car elle peut être utilisée pour (mais sans s'y limiter) des appels à des méthodes statiques.

<?phpclass A {
    public static function who() {
        echo __CLASS__; //返回该类被定义时的名字
    }    public static function test() {
        self::who();
    }
}class B extends A {
    // public static function who() {
    //     echo __CLASS__;
    // }}

B::test();  //A?>

Utilisation de la liaison statique tardive

La liaison statique tardive souhaitait à l'origine introduire un nouveau mot-clé pour représenter la classe initialement appelée au moment de l'exécution pour contourner les restrictions .

En termes simples, ce mot-clé vous permet de faire référence à la classe B au lieu de A lors de l'appel de test() dans l'exemple ci-dessus. Il a finalement été décidé de ne pas introduire de nouveaux mots-clés, mais d'utiliser le mot-clé statique déjà réservé.

Dans un environnement non statique, la classe appelée est la classe à laquelle appartient l'instance d'objet. Puisque $this-> tentera d'appeler la méthode privée dans la même portée, static:: peut donner des résultats différents.
Example #2 static:: 简单用法<?phpclass A {
    public static function who() {
        echo __CLASS__;
    }    public static function test() {
        static::who(); // 注意使用static,后期静态绑定从这里开始
    }
}class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test();  //B?>
Une autre différence est que static:: ne peut être utilisé que pour les propriétés statiques.


Liaison statique tardive

PHP 5.3.0

Utilisé pour : les références aux classes appelées statiquement dans la portée de l'héritage

Principe de fonctionnement :

    stocke le nom de classe du précédent "appel sans transfert".
  • 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.
  • Transfert d'appel : appel statique via self::, parent::, static::, forward_static_call() (appel d'une méthode statique).
  • Vous pouvez utiliser la fonction get_call_class() pour obtenir le nom de classe de la méthode appelée, et static:: indique sa portée.

Cette fonctionnalité est nommée "Late Static Binding" d'un point de vue interne au langage.
"Liaison tardive" signifie que static:: n'est plus résolu dans la classe dans laquelle la méthode actuelle est définie, mais est calculé au moment de l'exécution réelle.

On peut également l'appeler « liaison statique » car elle peut être utilisée pour (mais sans s'y limiter) des appels à des méthodes statiques.



<?phpclass A {
    public static function who() {
        echo __CLASS__; //返回该类被定义时的名字
    }    public static function test() {
        self::who();
    }
}class B extends A {
    // public static function who() {
    //     echo __CLASS__;
    // }}

B::test();  //A?>
Utilisation de la liaison statique tardive

La liaison statique tardive souhaitait à l'origine introduire un nouveau mot-clé pour représenter la classe initialement appelée au moment de l'exécution pour contourner les restrictions .

En termes simples, ce mot-clé vous permet de faire référence à la classe B au lieu de A lors de l'appel de test() dans l'exemple ci-dessus. Il a finalement été décidé de ne pas introduire de nouveaux mots-clés, mais d'utiliser le mot-clé statique déjà réservé.

Dans un environnement non statique, la classe appelée est la classe à laquelle appartient l'instance d'objet. Puisque $this-> tentera d'appeler la méthode privée dans la même portée, static:: peut donner des résultats différents.

Une autre différence est que static:: ne peut être utilisé que pour les propriétés statiques.
Example #2 static:: 简单用法<?phpclass A {
    public static function who() {
        echo __CLASS__;
    }    public static function test() {
        static::who(); // 注意使用static,后期静态绑定从这里开始
    }
}class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test();  //B?>

Recommandations associées :

[classes et objets php] contraintes de type

[classes et objets php] copie d'objet

[classes et objets php] méthodes magiques

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