Tienes que preguntarte: "¿Me estoy dirigiendo al problema con el enfoque adecuado?"
self::
y static::
hacen dos cosas diferentes. Por ejemplo, self::
o __CLASS__
son referencias a la clase actual, por lo que se define en cierto ámbito NO será suficiente la necesidad de realizar llamadas estáticas en reenvío.
¿Qué pasará con la herencia?
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();
Esto imprimirá
A
En el otro lado con static::
Tiene el comportamiento esperado
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();
Esto imprimirá
B
que se llama late static binding in PHP 5.3.0. Resuelve la limitación de llamar a la clase que fue referenciada en el tiempo de ejecución.
Con esto en mente, creo que ahora puede ver y resolver el problema adecuadamente. Si está heredando varios miembros estáticos y necesita acceso a los miembros principales y secundarios self::
no será suficiente.
pienso 'static' es el enfoque equivocado en primer lugar. Parece que (y corrija si está mal) acaba de hacer que su código no sea comprobable. – PeeHaa