2017-08-03 3 views
0

J'ai un code php qui effectue la liste des répertoires/fichiers. Cependant, cela ne fonctionne pas lorsqu'il est appelé par objet.Fonction récursive fonctionne uniquement sans classe, mais pas avec la classe

Suite Code Works:

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')); 

Le code suivant ne fonctionne pas:

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

Est-ce que votre code entier? – ksjohn

+1

Parce que vous ne savez pas ce qu'est '$ this'? –

+0

oui, mais apparemment cela ne fonctionne avec l'objet que s'il n'y a pas de sous-répertoire dans le chemin donné du répertoire –

Répondre

2

Votre erreur est dans votre méthode, votre méthode se appelle re cursive via:

getDirContents(); 

mais devrait le faire comme (dans votre classe Dira):

$this->getDirContents(); 
1

Vous utilisez la fonction récursive getDirContents() mais quand vous l'appelez à nouveau vous manque $this.

Essayez ci-dessous Exemple:

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