理解PHP严格,我为什么要关心?

时间:2011-10-06 21:07:58

标签: php error-handling

recent question I posted中,我描述了我在本地服务器上开发网站的方式,一切正常。然后在实时部署后,由于使用了未定义的变量,我得到了错误。主要是由于以下情况......

if($var!=""){...}

我知道我应该使用PHP严格并根据我在上一个问题上得到的答案修复所有错误。

现在我想知道......为什么?留下这样的代码可能会产生哪些漏洞?我希望能够向其他人证明为什么需要修复错误。

5 个答案:

答案 0 :(得分:7)

E_STRICT消息的目的是:

  

让PHP建议对代码进行更改,以确保代码的最佳互操作性和向前兼容性。

来源:Error Handling Constants

答案 1 :(得分:1)

在这种情况下,它是因为行为不可预测。 如果你的var没有定义,你的情况可能是真的或错误的,随机的。

答案 2 :(得分:0)

这是因为古老的说法是,在编译时能够捕获错误对开发人员来说比在运行时弹出它们更有价值,众神禁止在实时安装上。严格模式下的PHP会为您做到这一点 - 在解析代码时捕获它们,这在执行之前完成。这是开发软件的一种更明智的方式,即使在PHP中也是如此。如果您确实希望它在尝试评估无效引用时忽略条件,则可以使用@错误抑制运算符。

就像使用白名单而不是黑名单一样 - 中止任何错误,除了你明确禁止的错误。您在编译时捕获的任何错误(使用PHP解析时间)可能会导致运行时错误进一步传播并在其他地方弄乱您的逻辑。

此外,它不仅仅对未定义的变量进行barf,对于未知的过程也是如此。您也应该在大多数情况下使用require而不是include,因为当您尝试包含的文件由于某种原因而未找到时,您会想要致命错误,而不是警告。大部分时间都是。

答案 3 :(得分:0)

if (isset($var) and $var != "")

或:

if(strlen($var) > 0)

答案 4 :(得分:0)

提醒isset函数接受多个变量,而空白则不接受。

if(isset($var_1, $var_2) && !empty($var_1) && !empty($var_2)){
  // code
}