请参阅以下函数来扫描目录中的文件(取自此处)
function scandir_only_files($dir) {
return array_filter(scandir($dir), function ($item) {
return is_file($dir.DIRECTORY_SEPARATOR.$item);
});
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为$ dir不在匿名函数的范围内,并显示为空,导致过滤器每次都返回FALSE.我该怎么改写这个?
Arn*_*anc 15
您必须使用use关键字显式声明从父作用域继承的变量:
// use the `$dir` variable from the parent scope
function ($item) use ($dir) {
Run Code Online (Sandbox Code Playgroud)
function scandir_only_files($dir) {
return array_filter(scandir($dir), function ($item) use ($dir) {
return is_file($dir.DIRECTORY_SEPARATOR.$item);
});
}
Run Code Online (Sandbox Code Playgroud)
见这个例子来自匿名函数页.
闭包可以从父作用域继承变量.必须在函数头中声明任何此类变量.闭包的父作用域是声明闭包的函数(不一定是从中调用它的函数).