【问题标题】:PHP: Can anonymous functions inside an associative array access other members of the array?PHP:关联数组中的匿名函数可以访问数组的其他成员吗?
【发布时间】:2011-08-16 14:37:58
【问题描述】:

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

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

【问题讨论】:

  • 不能直接访问$foo['str']吗? (我现在没有要测试的启用闭包的 PHP 版本)
  • 不,$foo 未定义。
  • ...它可以直接访问$foo['str'],请看下面我的解决方案:

标签: php associative-array


【解决方案1】:

如果$foo 定义在全局命名空间中,您应该能够通过$GLOBALS['foo']['str'] 访问它(或通过global $foo; 构造使其可用)。如果不是(局部变量、参数、成员变量……),则必须将其(作为参考!)传递给匿名函数:

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

【讨论】:

  • 谢谢!我可以通过$GLOBALS['foo']['str'] 访问它
  • 请注意,如果 $GLOBAL 数组是本地变量或成员变量,则无法访问它。
【解决方案2】:

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

<?php

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

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

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

如果您将任何内容传递给匿名函数,你可以这样称呼它:

$arr["b"]();

如果你不包括方法括号,它将不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 2011-11-29
    • 2010-11-11
    相关资源
    最近更新 更多