Sobes.tech
Middle+

Qu'est-ce que la liaison statique tardive en PHP?

sobes.tech IA

Réponse de l'IA

Ce mécanisme permet de faire référence à la classe appelée dans le contexte des appels statiques. Il résout le problème lié aux auto-références dans les classes héritées lors de l'utilisation du mot-clé static::.

Considérons un exemple utilisant self:: :

<?php
class A {
    public static function who() {
        echo __CLASS__; // Affiche A
    }
    public static function test() {
        self::who(); // Appelle A::who()
    }
}
class B extends A {
    public static function who() {
        echo __CLASS__; // Affiche B
    }
}

B::test(); // Affiche A

Dans ce cas, self::who() dans la classe A appellera toujours la méthode who de la classe A, même si l'appel à test() provient de la classe B.

Voyons maintenant un exemple avec static:: :

<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        static::who(); // Appelle who() de la classe qui a initié l'appel à test()
    }
}
class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test(); // Affiche B

Ici, static::who() dans la classe A lors d'un appel depuis la classe B se référencera à la classe B et appellera la méthode who() de la classe B.

La liaison tardive statique permet de déterminer dynamiquement quelle classe utiliser dans le contexte d'un appel statique, en fonction de la classe réellement appelée. Cela est particulièrement utile lors du travail avec des hiérarchies de classes et des méthodes statiques qui doivent se comporter de manière polymorphe. Elle fonctionne en se souvenant de la "classe non redirigée appelée" (la classe finale dans la chaîne d'héritage à partir de laquelle l'appel statique a commencé) et en l'utilisant pour résoudre les références static::.