29

通常,我E_ALL会查看 PHP 可能对我的代码所说的任何内容,以尝试改进它。

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

运行时通知。启用让 PHP 建议对您的代码进行更改,这将确保您的代码的最佳互操作性和前向兼容性。

所以我想知道我是使用最好的error_reporting水平E_ALL还是最好的水平E_STRICT?还是我还没有学习其他组合?

4

8 回答 8

44

在 PHP 5 中, 所涵盖的东西E_STRICT并没有被 涵盖E_ALL,因此要获得最多的信息,您需要将它们组合起来:

 error_reporting(E_ALL | E_STRICT);

在 PHP 5.4 中,E_STRICT将包含E_ALLE_ALL.

你也可以使用

error_reporting(-1);

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

error_reporting(~0);
于 2008-09-16T17:39:46.307 回答
10

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

error_reporting = E_ALL | E_STRICT

你也应该安装Xdebug,它可以突出你在炫目的色彩中的错误并打印有用的详细信息。

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

于 2008-09-16T18:22:44.130 回答
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 中修复...

于 2008-09-16T17:38:55.623 回答
2

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

E_ALL 中包含的内容记录在在线手册的PHP 预定义常量页面中。

就我个人而言,我认为如果你使用 E_STRICT 并不重要。它当然不会伤害您,尤其是因为它可能会阻止您编写在 PHP 的未来版本中被破坏的可能性很小的脚本。另一方面,在某些情况下,严格的信息可能过于嘈杂,尤其是在您赶时间的情况下。我建议您默认打开它,并在它变得烦人时将其关闭。

于 2008-09-16T17:39:55.217 回答
2

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

于 2011-08-29T07:44:58.233 回答
1

根据您对此代码的长期支持计划,E_STRICT启用调试可能会帮助您的代码在遥远的将来继续工作,但对于日常使用而言,这可能是多余的。有两件重要的事情E_STRICT要记住:

  1. 根据手册,大多数E_STRICT错误是在编译时生成的,而不是运行时。如果您将错误级别提高到E_ALL代码中(而不是通过php.ini),您可能永远不会看到E_STRICT错误。
  2. E_STRICT包含在E_ALLPHP 6 中,但不包含在 PHP 5 中。如果您将服务器升级到 PHP6,并E_ALL按照上面 #1 中的说明进行配置,您将开始看到E_STRICT错误,而无需您进行任何其他更改。
于 2008-09-16T17:42:57.347 回答
0

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

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

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

于 2008-09-16T18:20:38.707 回答
-1

ini_set("display_errors","2"); 错误报告(E_ALL);

于 2008-09-16T17:34:45.493 回答