3

简单的问题,但很难回答?我在类方法中有以下匿名函数:

$unnest_array = function($nested, $key) {
    $unnested = array();

    foreach ($nested as $value) {
        $unnested[] = (object) $value[$key];
    }

    return $unnested;
};

在同一个类方法中,我有这个数组,我保存匿名函数。即我使用内联创建了一个新的匿名函数,create_function()并且我想使用已经定义的匿名函数$unnest_array()。是否可以?

$this->_funcs = array(
    'directors' => array(
        'func'  => create_function('$directors', 'return $unnest_array($directors, "director");'),
        'args'  => array('directors')
    )
);

目前我得到“未定义的变量:unnest_array”。帮助?

4

1 回答 1

2

你为什么首先使用create_function?闭包create_function完全替换,使其在 5.3 之后的所有 PHP 版本中基本过时。似乎您正试图通过 $unnest_array第二个参数固定为"director".

除非我误解了你,否则你应该能够通过使用闭包/匿名函数(未经测试)来获得相同的结果:

$this->_funcs = array(
    'directors' => array(
        'func'  => function($directors) use ($unnest_array)
            {
                return $unnest_array($directors, "director");
            },
        'args'  => array('directors')
    )
);

use ($unnest_array)子句是访问闭包父范围内的局部变量所必需的。

于 2012-08-12T19:04:43.057 回答