我有以下功能:
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);
答案 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);
}
}
}
}
}