2017-08-03 89 views
0

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

这是你的整个代码? – ksjohn

+1

因为你不知道'$ this'是什么? –

+0

是的,但显然只有在目录的给定路径内没有子目录的情况下它才能与对象一起使用 –

回答

2

你错就错在你的方法,你的方法自称是重新cursively通过:

getDirContents(); 

但应该这样做喜欢(在您的DIRA类):

$this->getDirContents(); 
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); 
相关问题