2017-09-06 14 views
0

からdocumentation、私は単純にarray_reduceは、第2引数で定義された関数に従ってarray_reduce配列を取って、最初のパラメータ配列の値が使い果たされます。どのように使用するステートメントは、PHPの関数の引数として使用されます

特にこの例では、getActiveWidgets()から返された配列をとります。ここまでOK、use文は何ですか?

$widgets = array_reduce(
      ThemeActiveWidgets::getActiveWidgets(), 
      function ($carry, $item) use($model) { 
       if ($item['part_id'] === $model['id']) { 
        $carry[]=$item; 
       } 
       return $carry; 
      }, 
      [] 
     ); 
+0

使用声明...? – clearshot66

+0

'use'は' $ model'を関数本体の中で利用できるようにします。そうでなければアクセスすることはできません。 – mpen

+0

useステートメントは変数を取り、それを関数のスコープに挿入します。 – aynber

答えて

1

私はあなたのために少し壊します。

関数array_reduce()は、最初のものが配列で、2番目が関数(この場合はクロージャ)またはanonymousの2つのパラメータを取ります。

コードでは、ThemeActiveWidgets::getActiveWidgets()を呼び出して、最初のパラメータとしてarray_reduce()に渡して配列を取得しています。二番目のパラメータとして、あなたがそうのように、機能を渡しています

function ($carry, $item) use($model) { ... }

これは無名関数であることから、変数$model(あなたがそれを定義した場所)、この無名関数の範囲外です、これは簡単な言葉では、無名関数内の変数$modelにアクセスできないことを意味します。ただし、関数宣言でuse($model)を使用することで、関数のスコープに "渡す"とアクセスすることができます。声明if ($item['part_id'] === $model['id'])場合、あなたは自分の無名関数の第2引数にアクセスし、インデックス['part_id']$model['id'](アレイ)が保持する値に保持する値を比較しているに関しては

この説明が役立ちますようにお願いいたします。

+0

別の関数でarray_reduceをラップして$ modelを引数として指定するのと同じですか? –

関連する問題