从内部调用php方法的问题

时间:2010-08-24 20:00:29

标签: php recursion

class styleFinder{

function styleFinder(){

}

function getFilesNFolders($folder){

    $this->folder = $folder ;
    if($this->folder==""){
        $this->folder = '.';
    }
    if ($handle = opendir($this->folder)) {
        while (false !== ($file = readdir($handle))) {
            if ($file != "." && $file != "..") {
                echo "$file<br /> ";
                if(is_dir($file)){

                    echo "<b>" . $file . " is a folder</b><br />&nbsp;&nbsp;&nbsp;with contents ";
                    $this::getFilesNFolders($file);
                   # echo "Found folder";
                }
            }
        }
        closedir($handle);
    }
}

} 我想打印出一个完整的文件夹和文件树,脚本进入第一个文件夹并找到文件,然后找到任何子文件夹,但不是那些子文件夹(是的,有一些)。有什么想法吗?

5 个答案:

答案 0 :(得分:7)

$this::getFilesNFolders($file);

应该

$this->getFilesNFolders($file);

答案 1 :(得分:6)

自PHP 5.1.2起,您就可以使用这个有用的类:http://www.php.net/manual/en/class.recursivedirectoryiterator.php

答案 2 :(得分:2)

访问类函数是这样的:

$this->functionName():

答案 3 :(得分:1)

由于还没有人提供,所以这里是代码的RecursiveDirectoryIterator版本:

$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator('/path/to/directory'),
        RecursiveIteratorIterator::SELF_FIRST);

foreach($iterator as $fileObject) {
    if($fileObject->isDir()) {
        echo "<strong>$fileObject is a folder:</strong><br>\n";
    } else {
        echo $fileObject, "<br>\n";
    }
}

答案 4 :(得分:0)

正如其他人所说,在方法本身中,您需要使用$this -> getFilesNFolders($file)调用getFilesNFolders。此外,代码发布的方式你最后错过了一个},但由于有一个代码在代码后面开始,这可能是一个错字。下面的代码对我有效(我通过命令行运行,因此添加了代码以缩进不同的目录级别并输出\ n):

<?php

class StyleFinder{
function StyleFinder(){
}

function getFilesNFolders($folder, $spaces){

    $this->folder = $folder ;
    if($this->folder==""){
        $this->folder = '.';
    }
    if ($handle = opendir($this->folder)) {
        while (false !== ($file = readdir($handle))) {
            if ($file != "." && $file != "..") {
                if(is_dir($file)){
                    echo $spaces . "<b>" . $file . " is a folder</b><br/>&nbsp;&nbsp;&nbsp;with contents:\n";
                    $this -> getFilesNFolders($file, $spaces . "  ");
                } else {
                    echo $spaces . "$file<br />\n";
                }
            }
        }
        closedir($handle);
    }
}
}

$sf = new StyleFinder();
$sf -> getFilesNFolders(".", "");

?>