将PHP recursiv函数转换为PHP公共函数

时间:2017-03-14 12:33:18

标签: php

我有以下功能:

function copyFolderFiles($src, $dest){
    if(!is_dir($src)){
        return false;
    } 
    if(!is_dir($dest)) { 
        if(!mkdir($dest)) {
            return false;
        }    
    }

    $i = new DirectoryIterator($src);
    foreach($i as $f) {
        if(is_dir($f) != $dest){
            if($f->isFile()) {
                copy($f->getRealPath(), ($dest.'/'. $f->getFilename()));
            } else if(!$f->isDot() && $f->isDir()) {
                copyFolderFiles($f->getRealPath(), ($dest.'/'. $f));
            }
        }
    }
}

我尝试将其转换为公共类递归函数,如下所示,但它不起作用:

class systemData {
    public function copyFolderFiles($src, $dest, $n = 0){
        if(!is_dir($src)){
            return false;
        } 
        if(!is_dir($dest)) { 
            if(!mkdir($dest)) {
                return false;
            }    
        }

        $i = new DirectoryIterator($src);
        foreach($i as $f) {
            if(is_dir($f) != $dest){
                if($f->isFile()) {
                    copy($f->getRealPath(), ($dest.'/'. $f->getFilename()));
                } else if(!$f->isDot() && $f->isDir()) {
                    copyFolderFiles($f->getRealPath(), ($dest.'/'. $f), $n+1);
                }
            }
        }
    }

}

我正在undefined function copyFolderFiles()提到copyFolderFiles($f->getRealPath(), ($dest.'/'. $f), $n+1);

我不确定我为了转换它做错了什么。上述函数应该将所有文件和文件夹复制到特定目录中。它作为一个独立的函数工作,但我希望它作为公共类中的函数。

我按如下方式调用该函数:

$systemData = new systemData;
$systemData->copyFolderFiles($documentRoot,$tempFileBackupDir);

2 个答案:

答案 0 :(得分:1)

更改

copyFolderFiles($f->getRealPath(), ($dest.'/'. $f), $n+1);

$this->copyFolderFiles($f->getRealPath(), ($dest.'/'. $f), $n+1);

答案 1 :(得分:0)

您当前的代码尝试调用不存在的全局函数copyFolderFiles

您需要通过$this->

来引用类方法
class systemData
{

    public function copyFolderFiles($src, $dest, $n = 0)
    {
        if(!is_dir($src)){
            return false;
        }
        if(!is_dir($dest)) {
            if(!mkdir($dest)) {
                return false;
            }
        }

        $i = new DirectoryIterator($src);
        foreach($i as $f) {
            if(is_dir($f) != $dest){
                if($f->isFile()) {
                    copy($f->getRealPath(), ($dest.'/'. $f->getFilename()));
                } else if(!$f->isDot() && $f->isDir()) {
                    //HERE
                    $this->copyFolderFiles($f->getRealPath(), ($dest.'/'. $f), $n+1);
                }
            }
        }
    }

}