2011-09-11 111 views
6

請參閱下面的函數以掃描目錄(來自here兩者)​​幫助PHP array_filter功能

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

這並不工作,因爲$ dir是不在範圍內的匿名函數的文件,顯示爲空,導致過濾器每次都返回FALSE。我將如何重寫這個?

回答

15

你必須明確地宣佈從父作用域繼承的變量,用use關鍵字:

// 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使用'使用' – tttony

+0

@ arnaud-真棒 - 剛剛學到了新東西! – Yarin