开发的推荐error_reporting()设置是什么?那么E_STRICT呢?

时间:2008-09-16 17:32:46

标签: php error-reporting

通常我使用E_ALL来查看PHP可能会对我的代码说些什么来尝试改进它。

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

  

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

所以我想知道我是否在error_reporting使用最佳E_ALL级别,或者与E_STRICT一起使用是最好的?或者还有其他我尚未学习的组合吗?

8 个答案:

答案 0 :(得分:44)

在PHP 5中,E_STRICT涵盖的内容未被E_ALL涵盖,因此要获取最多信息,您需要将它们合并:

 error_reporting(E_ALL | E_STRICT);

在PHP 5.4中,E_STRICT中会包含E_ALL,因此您只能使用E_ALL

您也可以使用

error_reporting(-1);

将始终启用所有错误。这在语义上更正确:

error_reporting(~0);

答案 1 :(得分:10)

在php.ini中使用以下内容:

error_reporting = E_ALL | E_STRICT

此外,您应该安装Xdebug,它可以突出显示您的错误,使鲜艳的颜色变暗并打印有用的详细信息。

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

答案 2 :(得分:5)

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

在实时环境中,您需要稍微(但只是略微)缩小的设置,但是您希望它们记录在用户无法看到的位置(我更喜欢syslog)。

http://php.net/error_reporting

E_ALL | E_STRICT用于在5.2.0之前使用PHP进行开发。

5.2介绍了E_RECOVERABLE_ERROR,5.3介绍了E_DEPRECATEDE_USER_DEPRECATED。如果你正在运行其中一个版本,你可能想要打开它们。

如果你想使用魔术数字,你可以将error_reporting值设置为2^n-1的某个相当高的值 - 比如16777215,这真的只是打开所有的1..n之间的位。但我不认为使用魔术数字是个好主意......

在我看来,由于E_ALL并非真的全部,PHP已经放弃了一些球。但显然它将在PHP 6中修复......

答案 3 :(得分:2)

在较新的PHP版本中,E_ALL包含更多类错误。从PHP 5.3开始,E_ALL包含 E_STRICT之外的所有内容。在PHP 6中,它甚至会包括它。这是一个很好的提示:最好看到更多错误消息而不是更少。

在线手册的PHP predefined constants页面中记录了E_ALL中包含的内容。

就我个人而言,如果您使用E_STRICT,我认为这并不重要。它肯定不会对你造成伤害,特别是因为它可能会阻止你编写在未来PHP版本中很容易被破坏的脚本。另一方面,在某些情况下,严格的消息可能过于嘈杂,尤其是如果你赶时间的话。我建议你默认打开它,当它变得烦人时把它关掉。

答案 4 :(得分:2)

您可以使用error_reporting = -1
它将始终由所有位组成(即使它们不在E_ALL中)

答案 5 :(得分:1)

根据您对此代码的长期支持计划,启用E_STRICT的调试可能有助于您的代码在不久的将来继续工作,但对于日常使用来说可能有些过分。要记住E_STRICT有两个重要的事项:

  1. Per the manual,大多数E_STRICT错误是在编译时生成的,而不是运行时生成的。如果您在代码中将错误级别提高到E_ALL(而不是通过 php.ini ),那么您可能永远不会看到E_STRICT错误。
  2. E_STRICT包含在PHP 6下的E_ALL中,但不包含在PHP 5中。如果您将服务器升级到PHP6,并按照上面#1中的描述配置E_ALL,那么将开始查看E_STRICT错误,而无需您进行任何其他更改。

答案 6 :(得分:0)

严格来说,不是error_reporting,我强烈建议使用任何自动显示解析错误和常见故障的IDE(例如,条件分配)。

Zend Studio for Eclipse默认启用此功能,自从我开始使用它以来,它一直在帮助我很多在发生错误之前发现错误。

例如,我有一段代码,我在$GLOBALS变量中缓存了一些数据,但我无意中写了$_GLOBALS。数据永远不会被缓存,我永远不知道Zend是否没有告诉我:“嘿,这个$_GLOBALS只出现一次,这可能是一个错误”。

答案 7 :(得分:-1)

的ini_set( “display_errors设置”, “2”); 的error_reporting(E_ALL);