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