递归函数只能在没有类的情况下工作,但不能在类中工作

时间:2017-08-03 10:31:24

标签: php file oop directory php-7

我有一个执行目录/文件列表的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'));

2 个答案:

答案 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);