-2

假设我向php文件发出了 ajax 请求。当结果是成功或其他时。我不需要我的服务器来处理其余的代码。所以我在考虑使用exit函数但是有太多exits的好习惯?我不知道。

  if(some condition) exit("success");
  else if(some condition) exit("fail");
 // after some 3 lines or so
 if(fail) exit("error");

在 PHP 中使用过多的退出函数是一种好的做法,也可能是坏的做法。谁能告诉我使用exit功能有什么限制吗?有人告诉我,你不能return在一个函数中使用太多的语句,我在想可能甚至exit不能更频繁地使用。使用太多exit功能是一种错误的做事方式?

更新

当它满足给定的要求时,就不需要进一步执行代码了。我不希望我的服务器宕机并遇到我可以简单退出的结局。我猜它变得更快?

4

6 回答 6

2

对我来说,这是错误的做法。如果可能的话,一个入口点和一个出口点 - 它是什么语言无关紧要。我关心我的时间,这种方法只是帮助阅读、维护和调试代码。

编辑

在这里总结我的观点(或遵循评论):这不是黑白情况,所以你永远不应该真正 100% 严格,但如果我发现这会导致可读性损失,我倾向于避免提前返回,这是一个充分的理由对我来说,但如果代码看起来像带有所有嵌套if()/else块的圣诞树,我有时也会同意做相反的事情。

于 2013-07-08T18:00:21.360 回答
2

我更喜欢有多个退出消息,在一个方法中有多个返回语句之间绘制相关性。

如果您没有多个退出消息,我认为您的代码会有点难看:

$retCondition = "success";

if(!some condition) {
  if(some condition 2) $retCondition = "fail";
  else {
    ..Your code
  }
}
exit($retCondition);

这是一种 php 解决方案,但你明白了。

于 2013-07-08T18:03:43.433 回答
1

我更喜欢使用Exception并且仅在使用exitredirecting使用headers

try {

    if (! $conditionA) {
        throw new Exception(" Fail ConditionA");
    }

    if (! $conditionB) {
        throw new Exception(" Fail ConditionB");
    }

    header("Location: xxx");
    exit();

} catch (Exception $e) {
    echo $e->getMessage();
}
于 2013-07-08T18:09:50.503 回答
0

使用 exit 是一种不好的做法。只有在关键代码失败时才应该使用它,例如:

<?php defined('FOO') or exit('Foo not set');?>
<?php mysql_connect('usr','pwd','host') or exit('could not connect');?>

对于正常情况,例如“if”语句:

if (condition) {
  echo 'Hello';
} else {
  callSomeFunction();
}

假设您有一个 fooBar 函数:

function fooBar () {
   if (condition) {
     return 'Hello';
   } else {
     return FALSE; // If you use return the function 'fooBar' stops at that point
     echo 'Hello?'; // This is not executed because we already returned.
   }
}

祝你好运

于 2013-07-08T18:07:33.583 回答
0

如果您使用的是真正的面向对象样式,则其结构应类似于以下内容

function foo($x){

    if (!is_int($x)) throw new Exception('foo needs an int argument');

    return $x *2

}

现在只有一个返回,当您调用您使用的方法时

$variable = 0;

try{

    $variable = $this->foo(2.5);

}catch(Exception e){

    print_r($e)
}

这使您可以看到问题并以受控的方式处理它。

它遵循具有 1 个“开始”和 1 个“结束”的流程图方式,但允许显示非常冗长的消息等

于 2013-07-08T18:09:27.097 回答
0

它不会引起任何问题,但只有一个出口点很好。它可能使调试更容易。你可以这样做:

if(some condition) $error_msg = "success";
else if(some condition) $error_msg = "fail";

// after some 3 lines or so
if(fail) $error_msg = "error";

if($error_msg != '') exit($error_msg);
于 2013-07-08T18:13:18.400 回答