2012-01-15 96 views
2

验证然后退出()函数或在if语句中包装整个验证结果是好的还是坏的做法?实施例PHP exit()vs if - else语句

function foo($uid) 
{ 

    $allowed = $auth->checkIfAllowed($uid); 

    if ($allowed == false) exit(); 

     //continue with senstive code here 

    } 
} 

OR

function foo($uid) 
{ 

    $allowed = $auth->checkIfAllowed($uid); 

    if ($allowed == true) 
    { 
     // do sensitive stuff 
    } 
} 
+0

你的两个样本做不同的工作。第一个终止代码执行,第二个 - 不是 – zerkms 2012-01-15 00:37:37

+1

你的意思是'return'? – animuson 2012-01-15 00:38:08

+1

我个人不喜欢任何语言的“早期回报”。有些情况下,他们可以使代码更清晰,但我喜欢“读取缩进”(其中的帖子有* * - grr!),并保持一致。 – 2012-01-15 00:40:15

回答

0

或。我不认为这会有所作为。它相对完全一样。在编程中,有许多编程方法,绝大多数情况下都不会正确。

0

他们是完全一样的。缩进和编码风格是唯一的区别。在这两种情况下,除非认证成功完成,否则敏感代码将不会执行。

尽管在代码中表现力通常会更好,但我建议使用第二种方法。

+0

我问这个问题的原因是因为第一个方法只是使代码更清洁..特别是当if语句中有很多代码时。我不必担心隐藏在我身上的左括号:) – user1117777 2012-01-15 00:48:25

+0

我知道。如果您打算使用第一种方法,您应始终以某种有意义的反馈生成的方式进行操作。用'trigger_error'或者更好的方法触发一个错误,使用'throw new Exception()'。但不要只是停止执行。通过抛出一个异常,你将停止执行,并且你让这个调用你的函数的人有机会捕捉到这个异常并且处理这个错误(或者简单地把它作为一个反馈发送给用户或者忽略它并记录在某个地方),它会被追溯。 – 2012-01-15 01:09:16

3

你的例子是等价的。

但是,最终用户突然退出脚本通常不会有用。相反,例如,向您的用户发送一条用HTML打印的有用错误消息,而不是您从die()调用中获得的纯文本。

function foo($uid) 
{ 

    $allowed = $auth->checkIfAllowed($uid); 

    if ($allowed == false) 
    { 
    $errormsg = "You are not allowed to view this page"; 
    } 

    else 
    { 
    //continue with senstive code here  
    } 
} 

后来,打印错误的HTML,而不是仅仅中止脚本:

<div class='error'><?php echo $errormsg; ?></error> 
4

我想借此机会谈谈exit;(如其他人说这两个工作,第二比第一个更明确,并且让你有机会向用户发送一个很好的错误信息)。我的主要牛肉(我有几个与exit;)是人们应该停止使用它在图书馆,即代码,可以/将用于其他项目......你知道有多恼火它是调试这些?抛出异常,触发致命错误,但给我东西与描述。

/rant

+1

感谢您的咆哮!如果用户不被允许,我实际上计划抛出一个异常,但是当你在这里时,异常会停止执行其他代码,如退出吗? – user1117777 2012-01-15 00:46:47

+1

@Wrikken你认为我们会看到有一天,所有在线的PHP教程都促进了'do_something()或die(“oops”);'错误处理方法已经消失了吗?它让我流泪,看到如此常见的SO。 – 2012-01-15 00:49:40

+0

只有当它们被捕获,并且它们没有被捕获,执行仍然会停止,但是在我的错误日志中我可以监控一个很好的错误消息,并且有一个描述和一个位置。 – Wrikken 2012-01-15 00:52:10