Ответ 1
Вы должны спросить себя: "Я нацелен на проблему с адекватным подходом?"
self::
и static::
выполняют две разные вещи. Например, self::
или __CLASS__
являются ссылками на текущий класс, поэтому в определенной области он не будет нуждаться в статическом вызове вперед.
Что произойдет при наследовании?
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();
Откроется
A
С другой стороны, с static::
Он имеет ожидаемое поведение
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();
Откроется
B
Это называется поздняя статическая привязка в PHP 5.3.0. Он решает ограничение вызова класса , указанного во время выполнения.
Имея это в виду, я думаю, что вы теперь можете увидеть и решить проблему адекватно. Если вы наследуете несколько статических членов и нуждаетесь в доступе к родительскому и дочернему элементам, self::
не будет достаточным.