我发现了一个关于这个错误报告(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