PHP错误:方法名称必须是字符串
我发现了一个错误报告(http://bugs.php.net/bug.php?id=24286)关于这一点,虽然我不确定这是否与我的问题有关,而且它非常古老。这是我的代码:PHP错误:方法名称必须是字符串,php,Php,我发现了一个错误报告(http://bugs.php.net/bug.php?id=24286)关于这一点,虽然我不确定这是否与我的问题有关,而且它非常古老。这是我的代码: class RegExp { function name($e){ .... } function email($e){ .... } function phone($e){ .... } } $regexp = new RegExp(); $final_keys= array("name"
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]];
}
}
我得到了与我的原始代码相同的错误。另一种使用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]];
}
}
for($key=0;$key
我得到了这个错误:
警告:call_user_func(Array)[function.call user func]:第一个参数应该是第91行/testreqmeta.php中的有效回调
好的,这里有一些解决这个问题的方法:
万一
<?
class Test {
var $var = Array('test_function');
function test_function($echo_var) {
echo $echo_var;
}
}
$test_obj = new test;
$test_obj->var[0]('bla');
?>
有一个函数用于实现您想要实现的功能call\u user\u func
:
在尝试示例代码时,我仍然没有收到任何错误(第二个示例中未定义的$key
),因此我无法确定什么可以修复它,但这里有一种方法可以简化事情并摆脱数组索引操作:对循环使用循环而不是
$query = array();
foreach ($final_keys as $key) {
if(!$regexp->$key($_POST[$key])) {
$invalid_uri_vars[] = $key;
} else {
$query[] = "$key={$_POST[$key]}";
}
}
$uri_vars = implode('&', $query);
我还用数组内爆替换了重复的字符串附件,这应该会稍微提高性能。如果需要,在提交查询字符串之前,还可以更轻松地进一步处理查询字符串。还有更好的方法,但这完全是另一个话题
注意RegExp
不是一个很好的类功能描述,因此它不是一个很好的名称。该类可以使用正则表达式,但它本身不是正则表达式(它支持诸如“匹配”和“替换”之类的操作;RegExp
的API没有这些操作)。您使用的是什么版本的PHP?上面的代码在充实之后(示例代码应该是)不会产生在PHP5.3.2下运行时标题中的错误。最好在帖子的正文中包含错误和生成错误的行的指示,这样就不会对正在发生的事情产生混淆。我正在一个实时站点上测试代码——在子文件夹的某个地方。该网站是在hostgator上托管的,我想……这并不能回答我的问题。如果您不确定主机运行的是哪一个PHP版本,可以使用它来查找。为了解决代码问题,需要解决该问题。现在不是。你的问题中缺少一些关键信息。另外,第二个示例(使用括号)在$index
上循环,但在循环体中使用$key
。如果这代表了您的实际代码,那么您引用的是一个未定义的变量($key
),这将导致一个警告。我使用的是版本5.3.1。不,$key
和$index
是相同的,很抱歉不一致。谢谢你的帮助!这个很好用,谢谢!问题:这一行是什么?$query[]=“$key={$\u POST[$key]}”代码>做什么?特别是双引号中的那个。它将产生如下结果:$query=array(“key”=>“value”)代码>对吗?不。它创建的是字符串,而不是数组。这个花括号是给你的。空的方括号用于。要在数组中存储键和值,我将使用$query[$key]=$value
,而不是$query=array($key,$value)
,除非在非常特殊的情况下。
<?
$test_obj->{$test_obj->var[0]}('bla');
?>
if($regexp->{$final_keys[$index]}($_POST[$final_keys[$index]])){
$query = array();
foreach ($final_keys as $key) {
if(!$regexp->$key($_POST[$key])) {
$invalid_uri_vars[] = $key;
} else {
$query[] = "$key={$_POST[$key]}";
}
}
$uri_vars = implode('&', $query);