Php 开发时建议的错误报告()设置是什么?那你呢?

Php 开发时建议的错误报告()设置是什么?那你呢?,php,error-reporting,Php,Error Reporting,通常,我使用eall查看PHP可能对我的代码所说的任何内容,以尝试改进代码 我刚刚注意到一个错误常量E_STRICT,但从未使用或听说过它,这是用于开发的好设置吗?手册上说: 运行时通知。允许PHP建议对代码进行更改,以确保代码的最佳互操作性和前向兼容性 因此,我想知道我是否在使用最好的错误报告级别与E\u ALL或与E\u STRICT一起使用是最好的?或者我还有其他组合需要学习吗?ini\u集(“显示错误”,“2”); 错误报告(E_全部) 在我看来,在开发阶段设置的错误报告级别越高越好 在

通常,我使用
eall
查看PHP可能对我的代码所说的任何内容,以尝试改进代码

我刚刚注意到一个错误常量
E_STRICT
,但从未使用或听说过它,这是用于开发的好设置吗?手册上说:

运行时通知。允许PHP建议对代码进行更改,以确保代码的最佳互操作性和前向兼容性

因此,我想知道我是否在使用最好的
错误报告
级别与
E\u ALL
或与
E\u STRICT
一起使用是最好的?或者我还有其他组合需要学习吗?

ini\u集(“显示错误”,“2”);
错误报告(E_全部)

在我看来,在开发阶段设置的错误报告级别越高越好

在实时环境中,您需要一个稍微(但只是稍微)减少的集合,但您希望将它们记录在用户看不到的地方(我更喜欢
syslog

E|u ALL | E|u STRICT
用于5.2.0之前的PHP开发

5.2引入了
E\u可恢复的\u错误
,5.3引入了
E\u不推荐的
E\u用户不推荐的
。如果您正在运行这些版本中的一个,您可能需要打开它们

如果您想使用幻数,您可以将
错误报告
值设置为相当高的
2^n-1
——比如说,
16777215
,这样就可以打开
1..n
之间的所有位。但我不认为使用魔法数字是个好主意


在我看来,PHP的
E_ALL
不是真正的全部,这有点失算。但显然,它将在PHP6中得到修复…

在PHP5中,
E_STRICT
所涵盖的内容不包括在
E_ALL
中,因此要获得最多的信息,需要将它们结合起来:

 error_reporting(E_ALL | E_STRICT);
在PHP5.4中,
E_STRICT
将包含在
E_ALL
中,因此您可以只使用
E_ALL

你也可以使用

error_reporting(-1);
这将始终启用所有错误。在语义上更正确的是:

error_reporting(~0);

在较新的PHP版本中,E_ALL包含更多的错误类。从PHP5.3开始,E_包含除E_严格之外的所有内容。在PHP6中,它很可能会包括这一点。这是一个很好的提示:最好看到更多的错误消息,而不是更少

E_ALL中包含的内容记录在在线手册的页面中


就我个人而言,我认为如果你严格使用E_并不重要。它当然不会伤害您,特别是因为它可能会阻止您编写脚本,而这些脚本在未来的PHP版本中很可能会被破坏。另一方面,在某些情况下,严格的消息可能太吵了,特别是当你很匆忙的时候。我建议您在默认情况下打开它,当它变得烦人时将其关闭。

根据您对此代码的长期支持计划,启用
E_STRICT
进行调试可能有助于您的代码在遥远的将来继续工作,但对于日常使用来说,这可能有些过头了。关于
E_STRICT
有两件重要的事情需要记住:

  • ,大多数
    E_STRICT
    错误是在编译时生成的,而不是在运行时生成的。如果在代码中(而不是通过php.ini)将错误级别增加到
    E_ALL
    ,您可能永远不会看到
    E_STRICT
    错误
  • E_STRICT
    包含在PHP 6下的
    E_ALL
    中,但不在PHP 5下。如果您将服务器升级到PHP6,并按照上文第1节所述配置了
    E#u ALL
    ,您将开始看到
    E#u STRICT
    错误,而无需对您的部分进行任何其他更改

  • 不严格地说是错误报告,我强烈建议使用任何自动显示解析错误和常见故障(例如,条件中的赋值)的IDE

    Zend Studio for Eclipse在默认情况下启用了此功能,自从我开始使用它以来,它一直在帮助我在错误发生之前捕获错误


    例如,我有一段代码,我在
    $GLOBALS
    变量中缓存了一些数据,但我无意中编写了
    $\u GLOBALS
    。数据从未被缓存,我也不知道Zend是否告诉我:“嘿,这个
    $\u GLOBALS
    东西只出现一次,这可能是一个错误。”

    在php.ini中使用以下命令:

    error_reporting = E_ALL | E_STRICT
    
    此外,你应该安装,它可以突出你的错误,在盲目明亮的颜色和打印有用的详细信息


    不要让任何错误或通知出现在代码中,即使它是无害的。

    您可以使用
    错误报告=-1


    它将始终由所有位组成(即使它们不在E|all中)

    好的,PHP的函数名不区分大小写,但您应该按照它应该使用的方式使用它(例如
    错误报告(E|all | E| u STRICT)
    ,其中函数名不是用大写字母书写的)。顺便说一下,
    E_ALL
    在5.4以下的PHP版本中不包含
    E_STRICT
    。E_STRICT从5.4开始包含在E_ALL中。E_STRICT从5.4开始包含在E_ALL中。不是PHP 6请注意,如果PHP>=5.4,E_STRICT包含在ing E中_ALL@hakre,我不确定我是否理解你对这个答案的编辑。你显然是在暗示在“深奥系统”上,
    -1!=~0
    。这些深奥的系统是什么?它们真的存在吗?我猜PHP的整数是以C编译器编译PHP所用的任何格式存储的,您是否在考虑一个假设的场景,在这个场景中,有人编译PHP,比如说,一个补码C编译器?不管怎样,简单地修改Gordon的代码片段不是比留下一个“实际上,最后一段是错误的”编辑更好吗