我有一个执行目录/文件列表的PHP代码。但是,当被对象调用时它不起作用。
以下代码有效:
function getDirContents($dir, &$results = array()){
$files = scandir($dir);
foreach($files as $key => $value){
$path = realpath($dir.DIRECTORY_SEPARATOR.$value);
if(!is_dir($path)) {
$results[] = $path;
} else if($value != "." && $value != "..") {
getDirContents($path, $results);
$results[] = $path;
}
}
// print_r($results);
return $results;
}
var_dump(getDirContents('C:\xampp\htdocs\skillup\d4a1'));
以下代码不起作用:
class Dira {
function getDirContents($dir, &$results = array()){
$files = scandir($dir);
foreach($files as $key => $value){
$path = realpath($dir.DIRECTORY_SEPARATOR.$value);
if(!is_dir($path)) {
$results[] = $path;
} else if($value != "." && $value != "..") {
getDirContents($path, $results);
$results[] = $path;
}
}
// print_r($results);
return $results;
}
}
$obj = new Dira;
$arr = array();
var_dump($obj->getDirContents('C:\xampp\htdocs\skillup\d4a1'));
答案 0 :(得分:2)
你的错误在于你的方法,你的方法通过以下方式递归调用:
getDirContents();
但应该这样做(在您的Dira课程中):
$this->getDirContents();
答案 1 :(得分:1)
您正在使用递归函数getDirContents()
,但当您再次调用它时,您将丢失$this
。
尝试以下示例:
class abc{
public function getDirContents($dir, &$results = array()){
$files = scandir($dir);
foreach($files as $key => $value){
$path = realpath($dir.DIRECTORY_SEPARATOR.$value);
if(!is_dir($path)) {
$results[] = $path;
} else if($value != "." && $value != "..") {
$this->getDirContents($path, $results);
$results[] = $path;
}
}
return $results;
}
}
$res = new abc();
$re = $res->getDirContents('YOUR PATH');
echo '<pre>'; print_r($re);