通常我使用E_ALL
来查看PHP可能会对我的代码说些什么来尝试改进它。
我刚注意到一个错误常量E_STRICT
,但从未使用或听说过它,这是一个用于开发的好设置吗?手册说:
运行时通知。允许PHP建议对代码进行更改,以确保代码的最佳互操作性和向前兼容性。
所以我想知道我是否在error_reporting
使用最佳E_ALL
级别,或者与E_STRICT
一起使用是最好的?或者还有其他我尚未学习的组合吗?
答案 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_DEPRECATED
和E_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
有两个重要的事项:
E_STRICT
错误是在编译时生成的,而不是运行时生成的。如果您在代码中将错误级别提高到E_ALL
(而不是通过 php.ini ),那么您可能永远不会看到E_STRICT
错误。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);