@Memorivardo

Как получить имя класса из статического метода?

Есть код аналогичный этому:

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).

Я знаю вариант, при котором решается задача, но для него мне нужно прописывать имя класса как свойство этого класса, чего категорические делать не хочется.

Кто знает решение этой делемы?
  • Вопрос задан
  • 947 просмотров
Решения вопроса 1
AloneCoder
@AloneCoder
[object Object]
я так и не понял что вы хотите получить
A B или D на выходе
вот для A
class A extends B {}
abstract class B {
    public static function show(){
        echo static::class;
        //здесь хочу получить имя класса, от которого был вызван метод
    }
}

class D{
    public function init() {
        A::show();
    }
}

$object = new D();
$object->init();


Вот В
class A extends B {}
abstract class B {
    public static function show(){
        echo self::class;
        //здесь хочу получить имя класса, от которого был вызван метод
    }
}

class D{
    public function init() {
        A::show();
    }
}

$object = new D();
$object->init();
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
get_called_class(): php.net/manual/function.get-called-class.php

То, что вы хотите называется "позднее статическое связывание".
Появилось в PHP 5.4
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы