在闭包中使用数组元素


Use array element in closure

PHP 5.3 增加了对闭包的支持,我想知道您是否可以关闭特定的数组元素而不是整个数组。

例如,您可以执行以下操作:

$a = array('a', 'e', 'i', 'o', 'u');
$f = function($b) use($a){
    echo $a[2].$b;
};
$f('!'); // echos "i!"

但是有没有办法只在$a[2]附近关闭? 像这样的东西可能是:

$f = function($b) use($a[2] as $c){
    echo $c.$b;
};

这不起作用,它给出:

解析错误:语法错误、意外的"["、预期"、"或")"

显然,我可以这样做:

$c = $a[2];
$f = function($b) use($c){
    echo $c.$b;
};

但是,我认为一定有比这更好的方法。 那么,有没有办法只关闭数组中的特定变量?

正如评论员已经提到的:不。

目前,use只期望一个T_Variable($var)或参考T_Variable(&$var)。
但是有一个补丁使as的使用成为可能,就像在你的例子中一样。它可以在要点上找到。

也许这会在某个时候合并到 master 中,以便在将来的版本中成为可能。

但我真的不认为这是一个巨大的功能:-)

因此,在此期间,您必须使用替代解决方案。