我發現了一個關於這個錯誤報告(http://bugs.php.net/bug.php?id=24286),雖然我不確定它是否與我的問題有關這是非常古老的。這是我的代碼:PHP錯誤:方法名稱必須是字符串
class RegExp {
function name($e){ .... }
function email($e){ .... }
function phone($e){ .... }
}
$regexp = new RegExp();
$final_keys= array("name", "email", "phone");
for($index=0; $index < count($final_keys); $index ++){
if(!$regexp->$final_keys[$index]($_POST[$final_keys[$index]])){
$invalid_uri_vars .= $final_keys[$index].",";
}
else{
$uri_vars = "&".$final_keys[$index]."=".$_POST[$final_keys[$index]];
}
}
它所做的是使用數組中的值作爲要調用的方法的名稱。換句話說,我試圖用一個變量$final_keys[$index]
作爲它的名字來實現函數調用。
* 更新:我試着實施下面的建議,似乎沒有任何工作。這是我建議的修改之一:
for($key=0; $key < count($final_keys); $key ++){
if(!$regexp->{$final_keys[$key]}($_POST[$final_keys[$key]])){
$invalid_uri_vars .= $final_keys[$key].",";
}
else{
$uri_vars = "&".$final_keys[$key]."=".$_POST[$final_keys[$key]];
}
}
我得到了與我原來的代碼相同的錯誤。使用call_user_func另一種方法,但我不知道這樣做是正確的:
for($key=0; $key < count($final_keys); $key++){
if(!call_user_func(array($regexp, $final_keys[$key]), $_POST[$final_keys[$key]])){
$invalid_uri_vars .= $final_keys[$key].",";
}
else{
$uri_vars = "&".$final_keys[$key]."=".$_POST[$final_keys[$key]];
}
}
而且我得到這個錯誤:Warning: call_user_func(Array) [function.call-user-func]: First argument is expected to be a valid callback in /.........testreqmeta.php on line 91
您使用的是哪個版本的PHP?上述代碼在充實之後(示例代碼應該是[self-contained](http://sscce.org/#selfcon))在PHP 5.3.2下運行時不會在您的標題中產生錯誤。最好還包括錯誤以及在帖子正文中哪一行生成該錯誤的指示,以便不會對發生的事情造成混淆。 – outis 2010-11-14 10:38:49
我正在測試活動網站上的代碼 - 子文件夾中的某處。該網站託管在hostgator上,我認爲... – Joann 2010-11-14 13:32:42
這並不回答我的問題。如果您不確定您的主機運行哪個PHP版本,您可以使用['phpversion'](http://php.net/phpversion)查找。爲了解決代碼問題,該問題需要[重現](http://tinyurl.com/so-hints)。現在,事實並非如此。您的問題中缺少一些重要信息。另外,第二個示例(使用括號)在'$ index'上循環,但在循環體中使用'$ key'。如果這代表了您的實際代碼,那麼您指的是一個未定義的變量('$ key'),這會導致警告。 – outis 2010-11-15 05:12:03