Как получить имя класса из статического метода? Есть код аналогичный этому:class A extends B {}
abstract class B {
static function show(){
//здесь хочу получить имя класса, от которого был вызван метод
}
}
class D{
public function init() {
A::show();
}
}
$object = new D();
D->init();
Проблема: нужно получить внутри функции show() имя класса, из которого он непосредственно был вызван. Пока все мои поиски и попытки увенчались либо получением класса, в котором эта функция определена (B) или класса, в котором произошёл вызов (D).
Я знаю вариант, при котором решается задача, но для него мне нужно прописывать имя класса как свойство этого класса, чего категорические делать не хочется.
Кто знает решение этой делемы?

21 Авг 2019 в 07:04
158 +1
0
Ответы
1

Для того чтобы получить имя класса из статического метода, можно воспользоваться встроенной функцией PHP get_called_class(). Вот как можно модифицировать ваш код, чтобы получить имя класса, от которого был вызван статический метод:

abstract class B {
static function show(){
$className = get_called_class();
echo $className;
}
}
class A extends B {}
class D {
public function init() {
A::show();
}
}
$object = new D();
$object->init();

При вызове метода show() из класса A, вы получите имя класса A.

20 Апр в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 887 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир