2017-08-03 85 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); 
相關問題