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

时间:2011-08-16 14:37:59

标签: php associative-array

在以下示例中,是否可以从匿名函数中访问'str'值?

$foo = array(
  'str' => 'THIS IS A STRING',
  'fn' => function () {
    // is it possible from within here to access 'str'?
  }
);

2 个答案:

答案 0 :(得分:2)

如果在全局命名空间中定义$foo,您应该能够通过$GLOBALS['foo']['str']访问它(或通过global $foo;构造使其可用)。如果不是(local var,parameter,member variable,...),你必须将它(作为参考!)传递给匿名函数:

$foo = array(
  'str' => 'THIS IS A STRING',
  'fn' => function () use(&$foo) {
    echo $foo['str'];
  }
);

答案 1 :(得分:0)

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

<?php

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

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

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

如果您通过任何进入匿名函数的东西,你都会这样称呼:

$arr["b"]();

如果不包括方法括号,则无效。