Подтвердить что ты не робот

Как я могу вызвать статический метод из класса, если все, что у меня есть, - это строка имени класса?

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

$class_name = 'ClassPeer';
$class_name::doSomething();
4b9b3361

Ответ 1

В зависимости от версии PHP:

call_user_func(array($class_name, 'doSomething'));
call_user_func($class_name .'::doSomething'); // >5.2.3

Ответ 2

Чтобы развернуть мощность автозаполнения IDE и обнаружение ошибок, используйте это:

$class_name = 'ClassPeer';

$r = new \ReflectionClass($class_name );

// @param ClassPeer $instance

$instance =  $r->newInstanceWithoutConstructor();

//$class_name->doSomething();
$instance->doSomething();

В основном здесь мы вызываем статический метод для экземпляра класса.

Ответ 3

Используйте call_user_func. Также читайте на PHP callbacks.

call_user_func(array($class_name, 'doSomething'), $arguments);

Ответ 4

Отражение (поддерживается PHP 5) - как вы это сделаете. Прочитайте эту страницу, и вы сможете выяснить, как вызвать такую ​​функцию.

$func = new ReflectionFunction('somefunction');
$func->invoke();

Ссылка документации