如果函数成功,则重复函数-PHP

如果函数成功,则重复函数-PHP,php,function,Php,Function,我有以下功能将文件上载到数据库表字段 protected function _upload_file() { ... } 上载后,上载新文件将覆盖原始上载文件 我想要的是在不覆盖文件的情况下建立一个新的上传。在我看来,我必须创建一个新函数,如 function if_upload_file() { ... } 如果该功能成功,则重复该功能 你知道我该怎么做吗?如果文件上传成功,让函数返回true,只要它保持true,你就可以一次又一次地循环。那样 $con = true; wh

我有以下功能将文件上载到数据库表字段

protected function _upload_file() {
  ...
} 
上载后,上载新文件将覆盖原始上载文件

我想要的是在不覆盖文件的情况下建立一个新的上传。在我看来,我必须创建一个新函数,如

function if_upload_file() {
   ...
}
如果该功能成功,则重复该功能


你知道我该怎么做吗?

如果文件上传成功,让函数返回true,只要它保持true,你就可以一次又一次地循环。那样

$con = true;

while($con) {
    if($con) {
        $con = your_function()
    }   
}

//your function
function your_function() {
    //do your stuff here
    if($file_upload_successful) {
        return true;
    } else {
        return false;
    }
}

至少我认为这可能有用。。。甚至不确定。好吧,没有风险就没有乐趣。

如果文件上传成功,让函数返回true,只要它保持为true,就可以一次又一次地循环。那样

$con = true;

while($con) {
    if($con) {
        $con = your_function()
    }   
}

//your function
function your_function() {
    //do your stuff here
    if($file_upload_successful) {
        return true;
    } else {
        return false;
    }
}

至少我认为这可能有用。。。甚至不确定。嗯,没有风险就没有乐趣。

一个替代
你不工作的方法是递归使用函数

例如,如果您有一系列文件要上传

function foo($array_of_files) {

    if(is_array($array_of_files) && count($array_of_files) > 0) {

        $file = array_shift($array_of_files);
        // ... Handle upload code.

        if(count($array_of_files) > 0) {

            foo($array_of_files);

        }

    }

}
但是,这确实会构建堆栈层,并且可能会给调试带来相当大的麻烦


只要正确地处理循环条件,使用while循环将是一种明智的策略。

一种替代方法是递归地使用函数

例如,如果您有一系列文件要上传

function foo($array_of_files) {

    if(is_array($array_of_files) && count($array_of_files) > 0) {

        $file = array_shift($array_of_files);
        // ... Handle upload code.

        if(count($array_of_files) > 0) {

            foo($array_of_files);

        }

    }

}
但是,这确实会构建堆栈层,并且可能会给调试带来相当大的麻烦


只要正确处理循环条件,使用while循环将是一种明智的策略。

是否将文件存储在数据库中?你能发布一些代码吗?这些文件没有存储在数据库中。crud应用程序读取表并将数据路径的值存储在相应字段中,然后对其进行解释并链接到其默认的上载文件夹。主持人:据我所知,堆栈溢出是供开发人员和程序员查找其编程相关问题的答案。在我看来,我问了一个相关的问题,我得到了一个相关的答案。鉴于我得到了关于所提供信息量的问题的答案,我认为绝对没有理由将此问题标记为非主题。您是否将文件存储在db中?你能发布一些代码吗?这些文件没有存储在数据库中。crud应用程序读取表并将数据路径的值存储在相应字段中,然后对其进行解释并链接到其默认的上载文件夹。主持人:据我所知,堆栈溢出是供开发人员和程序员查找其编程相关问题的答案。在我看来,我问了一个相关的问题,我得到了一个相关的答案。鉴于我从提供的大量信息中得到了问题的答案,我认为绝对没有理由将这个问题标记为离题。“没有风险就没有乐趣”太棒了!我更喜欢这个用法而不是我的。如果返回真/假,并将重复项抽象到函数外部,则意味着函数本身的可重用性要高得多。此外,您还可以使用闭包来构建并使其功能更加强大。它看起来很棒。但我觉得我做错了什么<代码>致命错误:调用…
中未定义的函数multiple\u upload()是我如何命名您的函数的。注意:我将
$con
放在
受保护函数的上载文件()中,并将
受保护函数的多个上载文件放在
受保护函数的上载文件()之后。当他在循环中时,他不知道这个函数,所以我说你不能从那里调用
protected
函数。如果不需要,最简单的解决方案是删除受保护的
。我不知道你的代码,所以我不能给你那么多建议。“没有风险就没有乐趣”太棒了!我更喜欢这个用法而不是我的。如果返回真/假,并将重复项抽象到函数外部,则意味着函数本身的可重用性要高得多。此外,您还可以使用闭包来构建并使其功能更加强大。它看起来很棒。但我觉得我做错了什么<代码>致命错误:调用…
中未定义的函数multiple\u upload()
是我如何命名您的函数的。注意:我将
$con
放在
受保护函数的上载文件()中,并将
受保护函数的多个上载文件放在
受保护函数的上载文件()之后。当他在循环中时,他不知道这个函数,所以我说你不能从那里调用
protected
函数。如果不需要,最简单的解决方案是删除受保护的
。我不知道你的密码,所以我不能给你那么多建议。