Обращение к self в унаследованном методе

Компьютеры программирование php ООП

class A{
public static $name='A';
public static function GetName(){
return self::$name;
}
}

class B extends A{
public static $name='B';
}

echo B::GetName();
//A


Почему self в унаследованном статическом методе все равно указывает на родительский класс?
Как сделать чтобы метож GetName выдавал 'B', не переопределяя его в дочернем классе?
Ответы:
свойство static является принадлежностью класса, а не объекта. Свойство self указывает на сам класс, т.е. именно тот класс, в котором запускается метод. Видимо поэтому метод, определённый в A использует свойство класса A.
GetName() принадлежит классу A, стало быть и self будет определяться в пространстве имен этого класса.
Если бы getName был overrided в классе B, то там self вернул бы B
По поводу self вам правильно сказали уже, почему так происходит.
А вот сделать не переопределяя можно сделать через функцию get_called_class.
Т. е. делаем так:
$current_class = get_called_class();
$current_class::GetName();
2 NetRain: спасибо. Хороший вариант. Утащу себе :)


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.