機能

2011-09-11 1 views
6

array_filter PHPでのヘルプの$ dirは匿名関数でスコープにないので、これは動作しません(hereから撮影)ディレクトリ内のファイルをスキャンする機能

function scandir_only_files($dir) { 
    return array_filter(scandir($dir), function ($item) { 
     return is_file($dir.DIRECTORY_SEPARATOR.$item); 
    }); 
} 

を次の関数を参照してくださいは、と空の場合、フィルターが毎回FALSEを返します。どのように私はこれを書き直すだろうか?あなたが明示的にuseキーワードで、親スコープから継承された変数を宣言する必要が

答えて

15

// use the `$dir` variable from the parent scope 
function ($item) use ($dir) { 

function scandir_only_files($dir) { 
    return array_filter(scandir($dir), function ($item) use ($dir) { 
     return is_file($dir.DIRECTORY_SEPARATOR.$item); 
    }); 
} 

無名関数ページからthis exampleを参照してください。

クロージャは、親スコープから変数を継承することがあります。そのような変数は、関数ヘッダーで宣言する必要があります。クロージャの親スコープは、クロージャが宣言された関数です(必ずしも呼び出された関数である必要はありません)。

+0

+1 use use @ – tttony

+0

@ arnaud- awesome-ちょうど新しいことを学んだ! – Yarin

関連する問題