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

Функция класса вызова php по имени строки

Как я могу назвать обычную (не статическую) функцию класса по ее имени?

Ниже приведена ошибка, указывающая, что параметр 1 должен быть действительным обратным вызовом. Я не хочу, чтобы функция была статической, я хочу, чтобы она была нормальной функцией, и все примеры, которые я видел до сих пор, статичны.

class Player
{
    public function SayHi() { print("Hi"); }
}

$player = new Player();

call_user_func($Player, 'SayHi');
4b9b3361

Ответ 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();

Я предпочитаю эту форму.