建议的 error_reporting() 开发设置是什么?E_STRICT呢?

What is the recommended error_reporting() setting for development? What about E_STRICT?

提问人:SeanDowney 提问时间:9/17/2008 最后编辑:SeanDowney 更新时间:1/19/2016 访问量:20535

问:

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

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

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

所以我想知道我是否使用了最好的水平,或者它会是最好的?或者还有其他我还没有学会的组合吗?error_reportingE_ALLE_STRICT

PHP 错误报告

评论


答:

-1赞 Tim Boland 9/17/2008 #1

ini_set(“display_errors”,“2”); ERROR_REPORTING(E_ALL);

评论

0赞 Sk8erPeter 12/27/2011
好的,PHP的函数名不区分大小写,但你应该按照它应该使用的方式使用它(例如,函数的名称不是用大写字母写的)。顺便说一句,PHP版本中不包含低于5.4的版本。error_reporting( E_ALL | E_STRICT )E_ALLE_STRICT
5赞 Daniel Papasian 9/17/2008 #2

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

在实时环境中,您希望稍微(但只是略微)减少集合,但您希望将它们记录在用户看不到的地方(我更喜欢)。syslog

http://php.net/error_reporting

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

5.2 介绍和 5.3 介绍 和 .如果您运行的是其中一个版本,您可能需要打开这些版本。E_RECOVERABLE_ERRORE_DEPRECATEDE_USER_DEPRECATED

如果你想使用幻数,你可以将值设置为某个相当高的值 - 比如说,,这实际上只会打开 之间的所有位。但我不认为使用幻数是个好主意......error_reporting2^n-1167772151..n

在我看来,PHP并没有真正成为全部,所以有点丢球了。但显然它将在 PHP 6 中修复......E_ALL

44赞 Jim 9/17/2008 #3

在 PHP 5 中,所涵盖的内容没有被 所涵盖,所以要获得最多的信息,你需要将它们组合起来:E_STRICTE_ALL

 error_reporting(E_ALL | E_STRICT);

在 PHP 5.4 中,将包含在 中,因此您可以只使用 。E_STRICTE_ALLE_ALL

您还可以使用

error_reporting(-1);

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

error_reporting(~0);

评论

1赞 mTorres 8/22/2014
请注意,在 PHP >= 5.4 中,E_STRICT包含在 E_ALL 中
1赞 Mark Amery 9/12/2014
@hakre,我不确定我是否理解你对这个答案的编辑。你显然是在暗示,在“深奥的系统”上,有可能.这些深奥的系统是什么,它们真的存在吗?我猜想PHP的整数以C编译器用来编译PHP的任何格式存储,并且你正在考虑一个假设的场景,在这个场景中,有人在一个人的补码C编译器上编译PHP?无论如何,简单地修改 Gordon 的代码片段难道不比留下“实际上,最后一段是错误的”编辑更好吗?-1 != ~0
1赞 hakre 9/12/2014
-1 是一个数字,- 是一个数字运算符。根据负整数的处理方式,它可以表示 ~0,但不能表示。如果没有,那就是我称之为“深奥”的那些系统。从技术上讲,错误的是你想使用位运算符 ~ 而不是数字运算符。看 stackoverflow.com/questions/1967360/...这是你通常想要表达的。因此,代码在使用更正确的表达式时错误较少。是的,我经历过一次。但那是很久以前的事了,上次我被问到我已经无法从脑海中重现了。
0赞 Pacerier 1/26/2015
@hakre,我已经撤消了编辑。这是关于硬科学,而不是语义学。两者在技术上都是正确的。直到您可以命名一台机器,其中为您提供与 不同的观察到的行为。error_reporting(-1)error_reporting(~0)
2赞 Jan Krüger 9/17/2008 #4

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

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

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

评论

0赞 Anthony Bishopric 1/10/2013
自 5.4 起,E_STRICT包含在E_ALL中。
1赞 stormlash 9/17/2008 #5

根据此代码的长期支持计划,启用调试可能有助于代码在遥远的将来继续工作,但对于日常使用来说可能有点矫枉过正。有两件重要的事情需要牢记:E_STRICTE_STRICT

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

评论

0赞 Lee 1/3/2014
自 5.4 起,E_STRICT包含在E_ALL中。不是 PHP 6
0赞 Pablo Borowicz 9/17/2008 #6

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

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

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

10赞 Eduardo Marinho 9/17/2008 #7

在php.ini中使用以下命令:

error_reporting = E_ALL | E_STRICT

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

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

2赞 RiaD 8/29/2011 #8

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