【问题标题】:Recursive function works only without a class, but not with class递归函数只能在没有类的情况下工作,但不能在有类的情况下工作
【发布时间】:2018-01-10 21:47:03
【问题描述】:

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

【问题讨论】:

  • 这是你的全部代码吗?
  • 因为你不知道$this是什么?
  • 是的,但显然只有在目录的给定路径中没有子目录时它才适用于对象

标签: php file oop directory php-7


【解决方案1】:

您的错误在于您的方法,您的方法通过以下方式递归调用自己:

getDirContents();

但应该这样做(在您的 Dira 课程中):

$this->getDirContents();

【讨论】:

    【解决方案2】:

    您正在使用递归函数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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 2016-04-08
      • 1970-01-01
      • 2014-09-21
      • 2014-03-27
      • 1970-01-01
      相关资源
      最近更新 更多