Как получить имя класса из статического свойства потом обратиться уже к его статическому методу?

class my_class {
protected static $class_name;

public function __construct()
{
...
self::$class_name = "функция стороннего производителя"
...
}

public function method_a()
{
// Проблем нет, но не нравится
$class_name = self::$class_name;
$class_name::function();

// А так ошибка PHP Parse error:  syntax error, unexpected '::' 
self::$class_name::function();
}
}

Как правильно оформить


Ответы (2 шт):

Автор решения: Ипатьев
self::$class_name::function();

Вы извините конечно, но вам надо срочно обновляться. Уже больше 10 лет назад Никита Попов предложил Единый синтаксис переменных, который и был реализован в 7 версии, и который без проблем позволяет выполнять подобные конструкции.

Чисто для справки, другие варианты вызова через переменную

$function(); // имя функции в переменной
$function(...$params); // имя функции в одной переменной а аргументы - в другой
new $class->$method(); // имя динамического метода и класса из переменных
$class::$static(); // имя статического метода и класса из переменных

И так далее.

Ну и кроме того, к методам и свойствам класса можно обращаться через "массивный" синтаксис:

[self::$class_name,self::$method_name]();
→ Ссылка
Автор решения: Виктор Карев

Можно воспользоваться Reflection API:

$reflection = new \ReflectionClass($className);
$func = $reflection->getMethod($functionName);
$func->invoke(null, $parametersArray); // статический вызов
→ Ссылка