2016-12-12 2 views
1

Вот мой код:Как использовать переменную как имя метода объекта?

$method_name = 'mymethod()'; 
$obj = new Myclass(); 
$obj->$method_name; 

Как вы видите, я использовал $method_name как имя метода. Но он бросает это сообщение об ошибке:

Неопределенные свойство: приложение \ Classes \ Myclass :: $ MyMethod()

Как я могу это исправить?

+0

Как PHP должен знать, что вы хотите вызвать метод, а не доступ к свойству, называемому «mymethod()»? – deceze

+0

@deceze В конце есть две круглые скобки. Поэтому очевидно, что это метод. – stack

+0

Глядя на это: '$ obj -> $ method_name', это совсем не очевидно. На самом деле было бы совершенно безумным, если бы PHP решил, является ли '$ obj -> $ method_name' доступ к свойствам или вызовом метода на основе содержимого строки этой переменной. – deceze

ответ

4

Вам следует избегать использования строки для отражения ... И используйте ReflectionClass и ReflectionMethod.

Однако, правильный способ сделать это:

$method_name = 'mymethod'; 
$obj = new Myclass(); 
$obj->$method_name(); 
1

Вы можете установить имя метода mymethod(), что является недопустимым.

Установите его просто mymethod:

$method_name = 'mymethod'; 
$obj = new Myclass(); 
$obj->{$method_name}(); 
2

Вы должны использовать функцию обратного вызова call_user_func. Для этого Вам нужно сделать массив:

  • 1-й элемент является объектом
  • второй является метод

    call_user_func(array($player, 'doIt'));

Вы также можете сделать это без call_user_func:

$player->{'SayHi'}(); 

or:

$method = 'doIt'; 
$player->$method(); 
Смежные вопросы