PHP:如何在create_function()中显示变量?

时间:2012-04-12 20:30:40

标签: php preg-replace global-variables preg-replace-callback create-function

此代码:

$t = 100;
$str = preg_replace_callback("/(Name[A-Z]+[0-9]*)/",
                            create_function(
                                  '$matches',
                                  'return $matches[1] + $t;'
                            ), $func);

如何在preg_replace()函数中使用create_function()显示$ t?

5 个答案:

答案 0 :(得分:3)

anonymous function可以使用use语法:

$t = 100;
$str = preg_replace_callback("/(Name[A-Z]+[0-9]*)/",
    function($matches) use($t) // $t will now be visible inside of the function
    {
        return $matches[1] + $t;
    }, $func);

答案 1 :(得分:2)

您无法访问变量,但在您的情况下,您只需使用值:

$t = 100;
$str = preg_replace_callback("/(Name[A-Z]+[0-9]*)/",
                            create_function(
                                  '$matches',
                                  'return $matches[1] + ' . $t .';'
                            ), $func);

但是,高度建议您在此使用function($matches) use ($t) {}语法(http://php.net/functions.anonymous)。

preg_replace还有eval修饰符:

$str = preg_replace("/(Name[A-Z]+[0-9]*)/e", '$1+'.$t, $func);

但我觉得你的函数无论如何都在使用错误的操作符 - 或错误的模式/子模式。

答案 2 :(得分:0)

使任何函数看到全局变量的方式相同。

$str = preg_replace_callback("/(Name[A-Z]+[0-9]*)/",
                            create_function(
                                  '$matches',
                                  'global $t; return $matches[1] + $t;'
                            ), $func);

答案 3 :(得分:0)

你可以使用$GLOBALS,但不是高度推荐......

$str = preg_replace_callback ( "/(Name[A-Z]+[0-9]*)/", create_function ( '$matches', 'return $matches[1] + $GLOBALS["t"];' ), $func );

更好的解决方案

http://php.net/functions.anonymous匿名函数..如果您不喜欢使用它,您也可以在以数组格式获得结果后执行array_walkhttp://php.net/manual/en/function.array-walk.php)然后传递{ {1}}作为正确的函数参数

答案 4 :(得分:0)

匿名使用关键字使用全球 在create_function中使用全局

  

function()使用($ var1,$ var2 ......等){code here}

  

create_func($ args,'global $ var1,$ var2; code here;');