使用create_function作为闭包时引用包含作用域的变量.PHP

tjm*_*tjm 10 php closures reference

使用真正的闭包,我们可以做到,

function foo(&$ref)
{
    $inFn = function() use (&$ref)
    {   
        $ref = 42; 
    };  

    $inFn();
}
Run Code Online (Sandbox Code Playgroud)

因此修改引用而不必在调用中传递它$inFn.

如果我们更换,

    $inFn = function(... 
Run Code Online (Sandbox Code Playgroud)

    $inFn = create_function(...
Run Code Online (Sandbox Code Playgroud)

是否有任何(简单而干净)的方式来做同样的事情; 通过引用引用包含范围的变量而不明确地将其传递$inFn

jtb*_*des 0

看起来你可以直接使用$inFn = create_function('&$ref', ...);. 你试过这个吗?

  • 例如(我目前遇到的情况之一)当 `create_function` 函数用作 `preg_replace_callback` 的回调时,它只会传递一个“matches”参数。但在函数体内,我需要通过引用访问包含范围内的变量。 (2认同)
  • 嗯。听起来您可以使用对象方法作为回调,这样您就可以访问该对象的数据。或者(尽管这可能不是一个好主意)您可以使用 `$GLOBALS` 数组来代替。 (2认同)