如何执行闭包函数并填充PHP中引用传递的数组

时间:2015-11-20 18:19:59

标签: php closures

我第一次尝试使用PHP闭包。

我写了一个小函数,它将在其参数中采用数组和函数。它的工作是遍历给定数组,并在每个元素上执行$函数。

这是我的功能

/**
 * It check each item in a giving array for a property called 'controllers', 
 * when exists it executes the $handler method on it
 * 
 * @param array $items
 * @param function $handler
 */
protected function addSubControls($items, $handler)
{
    foreach( $items as $item){
        if( property_exists($item, 'controllers')){
            //At this point we know this item has a sub controller listed under it, add it to the list
            foreach($item->controllers as $subControl){
                $handler( $subControl );
            }
        }
    }
}

现在我想以两种方式使用此功能。

首先:在给定数组中的每个项目上执行方法generateHtmlValues()。这没有任何问题。

$this->addSubControls($control->items, function($subControl){
    $this->generateHtmlValues( $subControl );
});

第二:我想将每个限定项添加到在闭包方法之外使用的数组。

$controls = ['a','b','c'];
$this->addSubControls($control->items, function($subControl) use(&$controls) {
    $controls[] = $subControl->id;
});
var_dump($controls);

此时我希望$controls数组的值比原始数组多1个。但事实并非如此。

我在这里缺少什么?闭包如何填充我通过引用传递的数组?

1 个答案:

答案 0 :(得分:0)

毕竟,我的代码工作正常。

我看错了输出。

我会保留这个问题,希望能帮助别人。