Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP错误:方法名称必须是字符串_Php - Fatal编程技术网

PHP错误:方法名称必须是字符串

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"

我发现了一个错误报告(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", "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);