此代码:
$t = 100;
$str = preg_replace_callback("/(Name[A-Z]+[0-9]*)/",
create_function(
'$matches',
'return $matches[1] + $t;'
), $func);
如何在preg_replace()函数中使用create_function()显示$ t?
答案 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_walk
(http://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;');