2013-08-26 2 views
1

Я использую следующий код в своей программе.php call_user_func_array() warning

class A { 
function __call($fname,$arguments) 
{ 
    $methods = array('get', 'set'); 
    foreach ($methods as $method) { 
     if(strstr($fname,$method)) 
     { 
      $fname = str_replace($method, "", $fname); 
      $function = $method."method"; 
      if($method == "set") 
      { 
       call_user_func_array("setmethod", array($fname,$arguments[0])); 
      } 
      if($method == "get") 
      { 
       call_user_func_array("getmethod", $fname); 
      } 
      break; 
     } 
    } 
} 

function setmethod ($key,$value) 
{ 
    $this->$key = $value; 
} 

function getmethod($key) 
{ 
    return $this->$key; 
} 
} 

и я получаю warrning как этот

«Внимание: call_user_func_array() ожидает параметр 1, чтобы быть действительным обратным вызовом, функция„setmethod“не найден или имя недопустимой функции»

и программа перестает отображаться дальше.

+0

Итак, я считать это частью класса? – vollie

+0

'call_user_func_array' не волшебным образом признает, что вы находитесь в контексте класса. Используйте 'array ($ this," setmethod ")' вместо просто '' setmethod ''. – Yoshi

ответ

0

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

Используйте массив для представления обратного вызова:

call_user_func_array(array($this, "setmethod"), array($fname,$arguments[0])); 

То же самое, как:

call_user_func_array(array($this, "getmethod"), $fname); 
+0

Что делать, если я использую call_user_func() mehtod – user2293790

+0

@ user2293790 Это то же самое. – xdazz

+0

это дает мне предупреждение: Отсутствует аргумент 2 для extenddata :: setmethod() и Примечание: неопределенная переменная: значение, если я использую call_user_func() – user2293790