2016-12-13 8 views
1

Вот мой текущий код:Как передать массив методу?

public function myfunc($class_name, $method_name, array $params = []) { 
    $obj = new $class_name(); 
    if ($obj->$method_name()['status']) { 
     // do stuff 
    } 
} 

Мой текущий код работает хорошо. Теперь мне нужно передать массив $params методу $method_name(). Поэтому я использую функцию call_user_func_array PHP. Вот мой новый код:

public function myfunc($class_name, $method_name, array $params = []) { 
    $obj = new $class_name(); 
    if (call_user_func_array($obj->$method_name()['status'], $params)) { 
     // do stuff 
    } 
} 

Но в этой версии, он выдает эту ошибку:

call_user_func_array() expects parameter 1 to be a valid callback, no array or string given

Можете ли вы сказать мне, как я могу это исправить?

ответ

1

call_user_func_array() вызывает обратный вызов (который представляет собой массив, имя функциональной строки), где список параметров задается как массив. вы можете сделать

call_user_func(array($obj, $method_name), $params)['status'] 

выражение array($instance, $methodname) является представление обратного вызова в PHP, а именно метода $instance->$methodname.

+0

не будет работать .. он бросает * 'Вызов неопределенной функции имя_метода()' * –

+0

жаль что была опечатка, спасибо! – keksnicoh

0

В этом коде вам необходимо создать массив $ params и инициализировать его, а затем передать в качестве аргумента при вызове функции. Смотрите ниже код:

$params = array(); 
$params[0]=anyVal; 
$params[1]=anyVal; 
$params[n]=anyVal; 

if (call_user_func_array($obj->$method_name()['status'], $params)) 
{ 
    // do stuff 
} 
Смежные вопросы