2013-08-26 106 views
1

我在程序中使用了以下代碼。php call_user_func_array()警告

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

它給了我警告:對於extenddata :: setmethod()缺少參數2和注意:未定義的變量:如果我使用的是call_user_func() – user2293790