Sobes.tech
Middle+

¿Qué es la vinculación estática tardía en PHP?

sobes.tech AI

Respuesta de la IA

Este mecanismo permite hacer referencia a la clase llamada en el contexto de llamadas estáticas. Resuelve el problema asociado con las autorreferencias en clases heredadas al usar la palabra clave static::.

Veamos un ejemplo usando self:::

<?php
class A {
    public static function who() {
        echo __CLASS__; // Imprime A
    }
    public static function test() {
        self::who(); // Llamará a A::who()
    }
}
class B extends A {
    public static function who() {
        echo __CLASS__; // Imprime B
    }
}

B::test(); // Imprime A

En este caso, self::who() dentro de la clase A siempre llamará al método who de la clase A, incluso si la llamada a test() proviene de la clase B.

Ahora veamos un ejemplo usando static:::

<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        static::who(); // Llamará a who() de la clase que inició la llamado a test()
    }
}
class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test(); // Imprime B

Aquí, static::who() dentro de la clase A al ser llamado desde la clase B se referirá a la clase B y llamará al método who() de la clase B.

La vinculación estática tardía permite determinar dinámicamente qué clase usar en el contexto de una llamada estática, dependiendo de qué clase fue realmente llamada. Esto resulta especialmente útil al trabajar con jerarquías de clases y métodos estáticos que deben comportarse de manera polimórfica. Funciona recordando la "clase no redirigida llamada" (la clase final en la cadena de herencia desde la cual comenzó la llamada estática) y usándola para resolver las referencias static::.