1

为了在 的代码中传递一个数组create_function(),将其传递给参数是可行的,

$array = array('a', 'b', 'c');

$func = create_function('$arr', '
            foreach($arr as $var) echo "$var<br />";
        ');

$func($array);

但我想直接在代码中嵌入一个数组,就像eval()功能一样。像这样,

$array = array('a', 'b', 'c');
eval( 'foreach($array as $var) echo "$var<br />";');

但是,这不起作用。

$array = array('a', 'b', 'c');

$func = create_function('', '
            foreach(' . $array . ' as $var) echo "$var<br />";
        ');

$func();

那么我该怎么做呢?感谢您的信息。

4

4 回答 4

2

如果您坚持使用 create_function 而不是lambda 函数

$func = create_function('', '
  foreach(' . var_export($array, true) . ' as $var) echo "$var<br />";
');

您需要 php 解析器的数组的(有效)字符串表示形式。var_export提供了这一点。
Berry Langerak 的答案是要走的路。

于 2012-09-20T10:37:37.337 回答
1

当使用 PHP >= 5.3 时,您可以使用匿名函数来代替 create_function。匿名函数可以“使用”外部范围的变量。

<?php
$array = array('a', 'b', 'c');

$func = function( ) use( $array ) {
    foreach( $array as $value ) {
        echo $value;
    }
};

$func( );
于 2012-09-20T10:37:14.053 回答
0

使用闭包:

$function = function($array){

    foreach($array as $var){

        // do your stuff

    }

};

$function($yourArray);
于 2012-09-20T10:37:55.097 回答
-1

我仅出于教育目的发布此内容(这是非常糟糕的做法):

<?php

$array = array('a', 'b', 'c');

$func = create_function('', '
            global $array;
            foreach($array as $var) echo "$var<br />";
        ');

$func();

为什么这么惨?

  • 全局变量
  • 创建函数的丑陋方式

如果您的 PHP 版本至少为 5.3,则使用 lambda 函数。见@Berry Langerak 回答

于 2012-09-20T10:38:55.657 回答