使用太多退出的好习惯?

时间:2013-07-08 17:55:54

标签: php

说我已经向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。使用太多{{1}}函数是一种错误的做事方式?

更新

当满足给定要求时,不需要进一步执行代码。我不希望我的服务器停机并结束我可以简单地退出。我觉得它更快?

6 个答案:

答案 0 :(得分:2)

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

修改

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

答案 1 :(得分:2)

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

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

$retCondition = "success";

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

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

答案 2 :(得分:1)

我更喜欢使用Exception,仅使用exit redirecting使用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();
}

答案 3 :(得分:0)

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

<?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.
   }
}
祝你好运

答案 4 :(得分: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“结束”的流程图方式,但允许显示非常详细的消息等

答案 5 :(得分: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);