Comprendre les liaisons statiques tardives en PHP
En PHP, les liaisons statiques tardives introduisent une manière unique de gérer l'héritage et les références de classe. Contrairement à l'héritage traditionnel, où le mot-clé self est résolu en classe dans laquelle il est invoqué, les liaisons statiques tardives modifient ce comportement pour garantir que self pointe toujours vers la classe d'exécution réelle.
Le besoin d'une statique tardive Liaisons
Traditionnellement, le mot-clé self dans l'héritage PHP ferait référence à la classe actuelle, qu'il soit utilisé dans une classe enfant ou parent. Cela pourrait conduire à des résultats inattendus lors de l'appel de méthodes héritées des classes parent.
Par exemple, considérons une classe parent Parent avec une méthode foo() et une classe enfant Child qui remplace cette méthode. Si Child appelle self::foo(), il n'invoquera pas sa propre méthode foo() mais plutôt la méthode foo() de la classe Parent.
Présentation des liaisons statiques tardives
Les liaisons statiques tardives résolvent ce problème en introduisant une nouvelle utilisation du mot-clé static. Lorsque static est utilisé, il se lie à la classe d’exécution où il est initialement déclaré. Cela garantit que self résout toujours la bonne classe, même lorsqu'il est appelé depuis une classe enfant.
Concepts clés
En résumé, les liaisons statiques tardives impliquent :
Comprendre les différences
Pour illustrer les différences, considérons l'exemple suivant :
class Parent { public static function foo() { echo 'Parent::foo() called' . PHP_EOL; } } class Child extends Parent { public static function foo() { echo 'Child::foo() called' . PHP_EOL; } } Parent::foo(); // Outputs 'Parent::foo() called' Child::foo(); // Outputs 'Child::foo() called'
Comme vous pouvez le voir, l'utilisation de self dans Child entraînerait normalement l'appel de Parent::foo(). Cependant, avec les liaisons statiques tardives, static garantit que self::foo() fait toujours référence à la bonne classe Child.
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!