PHP:如何使变量在 create_function() 中可见



此代码:

$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作为正确的函数参数

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

函数() 使用($var 1,$var 2...等){在这里编码}

create_func($args,'全局$var 1,$var 2;在此处编码;');

相关内容

  • 没有找到相关文章

最新更新