通常我使用E_ALL
来查看PHP可能会对我的代码所说的任何内容,以尝试改进它。
我刚刚注意到一个错误常量E_STRICT
,但是从未使用或听说过它,这是一个很好的设置用于开发吗? 手册说:
运行时通知。 允许PHP建议对代码进行更改,以确保代码的最佳互操作性和向前兼容性。
所以我想知道我是否使用了与E_ALL
最佳的error_reporting
级别,或者它与E_STRICT
一起是最好的吗? 或者还有其他我尚未学习的组合吗?
通常我使用E_ALL
来查看PHP可能会对我的代码所说的任何内容,以尝试改进它。
我刚刚注意到一个错误常量E_STRICT
,但是从未使用或听说过它,这是一个很好的设置用于开发吗? 手册说:
运行时通知。 允许PHP建议对代码进行更改,以确保代码的最佳互操作性和向前兼容性。
所以我想知道我是否使用了与E_ALL
最佳的error_reporting
级别,或者它与E_STRICT
一起是最好的吗? 或者还有其他我尚未学习的组合吗?
在PHP 5中, E_STRICT
涵盖的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);
在php.ini中使用以下内容:
error_reporting = E_ALL | E_STRICT
此外,你应该安装Xdebug ,它可以突出你的错误明亮的颜色和打印有用的详细信息。
永远不要在代码中出现任何错误或通知,即使它是无害的。
在我看来,你在开发阶段设置错误报告级别越高越好。
在实时环境中,您需要稍微(但只是略微)减少的设置,但是您希望它们记录在某个用户无法看到的位置(我更喜欢syslog
)。
http://php.net/error_reporting
E_ALL | E_STRICT
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中得到修复......
您可以使用error_reporting = -1
它将始终包含所有位(即使它们不在E_ALL中)
在较新的PHP版本中,E_ALL包含更多类错误。 从PHP 5.3开始,E_ALL包含除 E_STRICT 之外的所有内容。 在PHP 6中,它甚至会包括它。 这是一个很好的提示:最好看到更多错误消息而不是更少。
E_ALL中包含的内容记录在在线手册的PHP预定义常量页面中。
就个人而言,如果您使用E_STRICT,我认为这并不重要。 它肯定不会对你造成伤害,特别是因为它可能会阻止你编写在未来PHP版本中很容易被破坏的脚本。 另一方面,在某些情况下,严格的消息可能过于嘈杂,尤其是如果你赶时间的话。 我建议您默认打开它,当它变得烦人时将其关闭。
根据您对此代码的长期支持计划,启用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
错误,而无需您进行任何其他更改。 严格来说,不是error_reporting,我强烈建议使用任何自动显示解析错误和常见故障的IDE(例如,条件赋值)。
的Zend Studio for Eclipse可以在默认情况下启用此功能,因为我开始使用它,它一直在帮助我很多 ,在发生之前就捕捉错误。
例如,我有这段代码,我在$GLOBALS
变量中缓存了一些数据,但我无意中写了$_GLOBALS
。 数据永远不会被缓存,我永远不知道Zend是否没有告诉我:“嘿,这个$_GLOBALS
东西只出现一次,这可能是一个错误”。
的ini_set( “display_errors设置”, “2”); 的error_reporting(E_ALL);