2013-07-08 34 views
-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功能是一种错误的做事方式?

任何帮助,非常感谢。谢谢

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

+1

它没有什么不对。但是您可能想要放入一些对您的JS代码有用的额外数据,以向用户解释为什么失败。例如“对不起,但你没有遇到'某种条件'”,而不仅仅是“失败”。 –

+1

这不是“坏习惯”,但可能是设计不佳的标志。我也不会说这是“好的做法”。 –

回答

2

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

如果没有多个出口的消息,我觉得你的代码将是一种丑恶:

$retCondition = "success"; 

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

这是怎样的一个PHP的解决方案,但你的想法。

2

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

编辑

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

+0

这是否意味着你反对早期“返回”的方法呢? – PeeHaa

+1

只要不隐藏在代码中,多次返回都可以。在我看来,多个退出是不好的 – exussum

+0

总的来说 - 是的,我反对。如果方法复杂且条件显而易见,那么我可以接受提前退出 - 那么提前退出()而不是另一个代码块对我来说可以作为一种例外(但由于它清晰可见而被允许)。但是我不接受代码中间的'exit()'或'return()' - 你可以轻易忽略它,所以它基本上是坏事。而且由于我不喜欢规则的很多例外(所以他们保持简单明了),那么一入一出就是我尽可能拥有的东西 –

0

使用退出是一种不好的做法。

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

对于正常情况下例如“如果”声明:

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. 
    } 
} 
例如,如果关键代码失败时,才应使用

祝你好运

+1

“只有在关键代码失败时才应使用”header('Location:http://example.com');退出;'< - 没有关键只是失败 – PeeHaa

+0

这是一个你应该使用exit的地方。 – Airoude

0

如果你使用的是真正的面向对象风格,它应该是structu红类似于以下

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“端”的流程图的方式,但允许非常详细消息将被显示等

1

我更喜欢exit如果redirecting使用headers

使用 Exception和只使用
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(); 
} 
+0

@PeeHaa ... lol done .... – Baba

+0

<3 ... 6更多... – PeeHaa

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); 
相关问题