Devi chiedere a te stesso: "Sto prendendo di mira il problema con l'approccio adeguato?"
self::
e static::
fare due cose diverse. Ad esempio, self::
o __CLASS__
sono riferimenti alla classe corrente, quindi definito in un determinato ambito NON sarà sufficiente la chiamata statica in avanti.
Che cosa succederà in eredità?
class A {
public static function className(){
echo __CLASS__;
}
public static function test(){
self::className();
}
}
class B extends A{
public static function className(){
echo __CLASS__;
}
}
B::test();
Questo stamperà
A
Nell'altra mano con static::
Ha il comportamento previsto
class A {
public static function className(){
echo __CLASS__;
}
public static function test(){
static::className();
}
}
class B extends A{
public static function className(){
echo __CLASS__;
}
}
B::test();
Questo stamperà
B
che si chiama late static binding in PHP 5.3.0. Risolve la limitazione di chiamare la classe che era di riferimento al runtime.
Con questo in mente penso che ora puoi vedere e risolvere il problema in modo adeguato. Se si ereditano diversi membri statici e si richiede l'accesso ai membri padre e figlio, self::
non sarà sufficiente.
penso 'static' è l'approccio sbagliato in primo luogo. Sembra (e si prega di correggere se sbagliato) hai appena reso il codice non testabile. – PeeHaa