Musisz zadać sobie pytanie: "Czy jestem ukierunkowany na problem z odpowiednim podejściem?"
self::
i static::
zrobić dwie różne rzeczy. Na przykład: self::
lub __CLASS__
są odniesieniami do bieżącej klasy, więc zdefiniowane w pewnym zakresie NIE wystarczą do statycznego wywoływania do przodu.
Co stanie się w przypadku dziedziczenia?
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();
To będzie drukować
A
W drugiej z static::
Ma oczekiwanego zachowania
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();
To wydrukować
B
To się nazywa late static binding in PHP 5.3.0. Rozwiązuje to ograniczenie wywoływania klasy, która była , do której odwołuje się w czasie wykonywania.
Mając to na uwadze, myślę, że możesz teraz zobaczyć i rozwiązać problem w odpowiedni sposób. Jeśli dziedziczysz kilku statycznych członków i potrzebujesz dostępu do rodzica i członków rodziny, to nie wystarczy.
myślę "static" jest w pierwszym rzędzie błędnym podejściem. Wygląda na to (i proszę poprawić, jeśli jest źle), po prostu spowodowałeś, że twój kod jest nietrwały. – PeeHaa