通过数组加载函数时为foreach提供的参数无效

时间:2014-06-18 15:12:25

标签: php arrays oop foreach

我在我的应用程序中输入了以下代码:

    public function generate_function_list($generated){
        foreach($generated as $method){
            call_user_func($method);
        }
    }
    public function echotest($text){    
        echo '<p>' . $text . '</p>';
    }

我按照这样执行:

    $arrayx = array(
        FormGenerator::echotest("test container 1"),
        FormGenerator::echotest("test container 2"),
        FormGenerator::echotest("test container 3"),
        FormGenerator::echotest("test container 4")
    );

    $nez->generate_function_list($arrayx);

这是输出:

<p>testcontainer 1</p><p>testcontainer 2</p><p>testcontainer 3</p><p>testcontainer4</p>

是的,正如您可以看到输出正确,它正确执行函数及其参数,但不幸的是我得到以下内容:

警告:在第2行的C:\ AppServ \ www \ test \ testclassgenerator.php中为foreach()提供的参数无效

我一直在检查generate_function_list函数中的foreach,我发现我无法读取里面设置的函数,所以它有点奇怪。

我的意图是使用简单的数组调用方法,并给出及时的参数。

谢谢!

1 个答案:

答案 0 :(得分:0)

您的阵列构建不正确的原因示例:

function foo() {
   echo 'foo'; // immediate output of 'foo', no return value
}

function bar() {
   return 'bar'; // no output, return 'bar' to the calling context
}


$foo = foo();
$bar = bar();

var_dump($foo); // outputs: NULL
var_dump($bar); // outputs: string(3) "bar"

$array = array(
    foo(),
    bar()
);

var_dump($array);

输出:

array(2) {
  [0]=> NULL
  [1]=> string(3) "bar"
}

您的echotest执行输出。它没有return电话。当执行返回到调用上下文时,PHP没有return的函数被赋予NULL值。

因此,您的数组,正如您在转储输出中所述,是一个NULL数组,一个用于在数组内进行的每个echotest()调用。然后,您将该数组传递给generate_function_list(),它将简单地遍历所有这些空值,并执行一系列call_user_func(NULL)次调用,这是毫无意义的。