提前返回后,下一个代码执行

时间:2016-06-02 09:08:01

标签: php return

我有php文件,我使用if statments,我通过ajax调用此文件.. onSuccess它给我结果如果文件上传成功或错误。

代码看起来像这样:

if(empty($_FILES['file']['name'])){
    return "no image was selected";
}
if($two_many_images){
    return "Only x images are alowed to upload";
}
if($size>2014522){
    return "Size error";
}
foreach($_FILES["file"]['tmp_name'] as $key=>$imgLocation){ 
    uploadImage($_FILES["fileToUpload"]['tmp_name'][$key], $imgLocation);
}

问题:首先,如果法规条件为真,那么我的第二个是否会执行判决?

2 个答案:

答案 0 :(得分:1)

这很容易证明,例如你有一个功能:

funciton foo(){
    echo "foo\n";
    return;
    echo 'bar';
}

如果你打电话

foo();

它会打印出来

foo

但不是bar。一旦执行指针命中返回,它将返回到调用foo()的位置。这也可以很容易地显示出来。

foo();
foo();
foo();

打印

foo
foo
foo

更新:根据你的意见,正确的方法来做你想要的是这个

if(empty($_FILES['file']['name'])){
    echo "no image was selected";
    exit();
}
if($two_many_images){
    echo "Only x images are alowed to upload";
    exit();
}
if($size>2014522){
    echo "Size error";
    exit();
}
foreach($_FILES["file"]['tmp_name'] as $key=>$imgLocation){ 
    uploadImage($_FILES["fileToUpload"]['tmp_name'][$key], $imgLocation);
}

我使用exit()而不是返回,因为它更具可读性并且更有意义,即使在您的情况下返回具有相同的效果。退出将完全结束php的执行,这真的是你想要的。您也可以执行类似

的操作
die( 'Message' );

或者

exit( 'Message' );

同样会退出并输出消息。它们几乎都是一样的...我把echo放在第一位只是因为我总是觉得把东西放在退出处有点脏。不知道为什么会这样,也许我将它链接到非预期的行为,因为看到die()在文件的顶部非常多,而不是在框架之外运行。但我离题了。

仅仅为了完整性,根据您的注释,如果您在PHP中调用全局范围的返回,则无法返回到该位置,因此执行只会暂停。使用exit或die更好的原因是return有明显不同的行为,即从函数调用中“返回”数据。因此,使用最符合您想要的行为的方法更具可读性。那就是结束当前脚本(PHP实例)的执行。

答案 1 :(得分:0)

不,你的第二个陈述不会被执行。调用返回时,不会执行其余代码。 PHP文档说:

  

如果从全局范围调用,则结束当前脚本文件的执行。