此代码:
$t = 100;
$str = preg_replace_callback("/(Name[A-Z]+[0-9]*)/",
create_function(
'$matches',
'return $matches[1] + $t;'
), $func);
如何在preg_replace() 函数中使$t从 create_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);
您无法使变量可访问,但在您的情况下,您可以只使用该值:
$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
的评估修饰符:
$str = preg_replace("/(Name[A-Z]+[0-9]*)/e", '$1+'.$t, $func);
但是我觉得您的函数无论如何都在这里使用了错误的运算符 - 或者错误的模式/子模式。
就像你让任何函数看到全局变量一样。
$str = preg_replace_callback("/(Name[A-Z]+[0-9]*)/",
create_function(
'$matches',
'global $t; return $matches[1] + $t;'
), $func);
$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
作为正确的函数参数
匿名中只需使用关键字 use 或 global在 create_function 使用全局
函数() 使用($var 1,$var 2...等){在这里编码}
或
create_func($args,'全局$var 1,$var 2;在此处编码;');