Я боролся в этой области уже несколько дней, и я пришел к выводу, но поскольку вывод не был тем, что я искал, прежде чем я сдадусь, я попытаюсь посмотреть, что говорят другие. Вера умирает последним...
Скажем, у нас есть суперкласс (называемый "Супер" ) и подкласс (называемый "Sub" ).
class Super {
protected static $title = 'super';
public static function get_class_name()
{
echo __CLASS__;
}
public static function get_title()
{
echo self::$title;
}
}
class Sub extends Super {
protected static $title = 'sub';
}
Теперь вы, вероятно, ожидаете, поскольку Sub расширяет Super, этот Sub теперь наследует все методы Super, однако, похоже, он получает только ссылки на методы Sub.
Я говорю это, потому что, если я звоню:
Sub::get_class_name();
вывод "Super", а не "Sub".
И если я звоню:
Sub::get_title();
снова, вывод "супер", и у меня даже есть заголовок $, объявленный в Sub.
Таким образом, это означает, что когда я вызываю унаследованную статическую функцию, область функций будет суперклассом, а не тем, на который вызывается (даже если вы печатаете обратную трассировку, это покажет, что вызов был сделан на суперклассе!!!), и для того, чтобы получить область видимости в качестве подкласса, на который делается вызов, мне нужно обновить этот метод внутри этого подкласса. Хорошо, этот вид побеждает цель расширения классов, не так ли?
Итак, мой вопрос: могу ли я когда-либо расширить статический класс, вызвать один из унаследованных методов и обладать областью подкласса? или, по крайней мере, иметь возможность идентифицировать это имя класса? И если нет, то почему я хотел бы расширить статические классы?
Спасибо!