Cos'è il binding statico tardivo in PHP?
sobes.tech AI
Risposta dell'AI
Questo meccanismo consente di fare riferimento alla classe chiamata nel contesto delle chiamate statiche. Risolve il problema delle auto-riferimenti nelle classi ereditarie quando si utilizza la parola chiave static::.
Consideriamo un esempio con self:::
<?php
class A {
public static function who() {
echo __CLASS__; // Stampa A
}
public static function test() {
self::who(); // Chiama A::who()
}
}
class B extends A {
public static function who() {
echo __CLASS__; // Stampa B
}
}
B::test(); // Stampa A
In questo caso, self::who() all'interno della classe A chiamerà sempre il metodo who della classe A, anche se la chiamata a test() proviene dalla classe B.
Ora vediamo un esempio con static:::
<?php
class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
static::who(); // Chiamerà who() della classe che ha avviato la chiamata a test()
}
}
class B extends A {
public static function who() {
echo __CLASS__;
}
}
B::test(); // Stampa B
Qui, static::who() all'interno della classe A chiamato dalla classe B si riferirà alla classe B e chiamerà il metodo who() della classe B.
Il binding statico tardivo permette di determinare dinamicamente quale classe usare nel contesto di una chiamata statica, a seconda della classe effettivamente chiamata. Questo è particolarmente utile quando si lavora con gerarchie di classi e metodi statici che devono comportarsi in modo polimorfico. Funziona ricordando la "classe chiamata non reindirizzata" (l'ultima classe nella catena di ereditarietà da cui è iniziata la chiamata statica) e utilizzandola per risolvere i riferimenti static::.