Как получить имя класса из статического свойства потом обратиться уже к его статическому методу?
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); // статический вызов