在以下示例中,是否可以从匿名函数中访问'str'值?
$foo = array(
'str' => 'THIS IS A STRING',
'fn' => function () {
// is it possible from within here to access 'str'?
}
);
答案 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"]();
如果不包括方法括号,则无效。