Функция класса вызова php по имени строки
Как я могу назвать обычную (не статическую) функцию класса по ее имени?
Ниже приведена ошибка, указывающая, что параметр 1 должен быть действительным обратным вызовом. Я не хочу, чтобы функция была статической, я хочу, чтобы она была нормальной функцией, и все примеры, которые я видел до сих пор, статичны.
class Player
{
public function SayHi() { print("Hi"); }
}
$player = new Player();
call_user_func($Player, 'SayHi');
Ответы
Ответ 1
Синтаксис callback
немного странный в PHP. Вам нужно сделать массив. Первый элемент - это объект, а второй - метод.
call_user_func(array($player, 'SayHi'));
Вы также можете сделать это без call_user_func
:
$player->{'SayHi'}();
Или:
$method = 'SayHi';
$player->$method();
Ответ 2
Вам нужно передать объект и метод вместе как массив:
call_user_func(array($Player, 'SayHi'));
Смотрите обратные вызовы, в частности:
// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
Ответ 3
В любом случае вы создаете объект класса, поэтому вы можете использовать объект для вызова его функции.
$player = new Player();
$player->SayHi();
или использовать обратный вызов
$player = new Player();
call_user_func(array($player, 'SayHi'));
Ответ 4
$player->SayHi();
Я предпочитаю эту форму.