0

这段代码:

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

如何使 $t 从 preg_replace() 函数中的 create_function() 可见?

4

5 回答 5

3

匿名函数可以工作,同时使用以下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);
于 2012-04-12T20:33:34.633 回答
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 )。

并且有 eval 修饰符preg_replace

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

但我觉得你的函数在这里使用了错误的运算符 - 或者错误的模式/子模式。

于 2012-04-12T20:37:08.167 回答
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_walk( http://php.net/manual/en/function.array-walk.php )您已经以数组格式获得了结果,然后$t作为正确的函数参数传递

于 2012-04-12T20:42:19.193 回答
0

在匿名中只需使用关键字useglobal 在 create_function 中使用global

函数()使用($var1,$var2...等){代码在这里}

或者

create_func($args,'global $var1,$var2;代码在这里;');

于 2013-11-18T16:18:32.847 回答
0

以同样的方式让任何函数看到一个全局变量。

$str = preg_replace_callback("/(Name[A-Z]+[0-9]*)/",
                            create_function(
                                  '$matches',
                                  'global $t; return $matches[1] + $t;'
                            ), $func);
于 2012-04-12T20:36:25.450 回答