PHP:匿名函数可以访问关联数组中的其他成员吗?

4
在下面的例子中,是否可以从匿名函数内部访问“str”值?
$foo = array(
  'str' => 'THIS IS A STRING',
  'fn' => function () {
    // is it possible from within here to access 'str'?
  }
);

你不能直接访问 $foo['str'] 吗?(我现在没有启用闭包的 PHP 版本可以测试) - zneak
不,$foo 未定义。 - nicknisi
...可以直接访问$foo ['str'],请参见我的解决方案: - Ian Campbell
2个回答

2
如果$foo在全局命名空间中定义,则可以通过$GLOBALS['foo']['str']访问它(或使用global $foo;构造使其可用)。如果它不是(局部变量、参数、成员变量等),则必须将其作为引用传递到匿名函数中:
$foo = array(
  'str' => 'THIS IS A STRING',
  'fn' => function () use(&$foo) {
    echo $foo['str'];
  }
);

谢谢!我可以通过 $GLOBALS['foo']['str'] 访问它。 - nicknisi
请注意,如果它是局部变量或成员变量,则无法通过$GLOBAL数组访问它。 - knittl

0

我找到了一种不使用全局变量的不同方法:

<?php

    $arr = array("a" => 12,
                "b" => function($num)
                        {
                            $c = $num * 2;
                            return $c;
                        });

    echo $arr["b"]($arr["a"]);
?>

注意数组索引调用以方法括号结尾的奇怪语法。通过将$arr["a"]作为参数传递,您可以访问该值(我想您也可以通过引用传递)。

如果您不向匿名函数传递任何内容,则可以像这样调用它:

$arr["b"]();

如果您不包括方法括号,它将无法工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接