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 に答える