3

我来自 J2EE 背景,似乎 PHP 开发人员使用以下语句关闭并忽略通知是很常见的:error_reporting(E_ALL & ~E_NOTICE);

我正在使用的应用程序充满了关于未设置变量的消息?这对我来说似乎很奇怪。

4

5 回答 5

10

这是不好的做法,但很常见。

您可以说这是标准做法,因为它是开箱即用的默认设置。

然而,它是 PHP 中的默认设置这一事实不应被认为是一个好主意!(咳咳_register_globals

问题在于它E_NOTICE涵盖了未定义的变量和未定义的数组索引,前者比后者更能说明错误。

当您打算$var使用$this->var. 仅出于这个原因,我认为清理未定义的数组索引警告消息是值得的,以便未定义的变量错误更加明显。

我原以为 PHP 5.3 允许您将这些分开(我还没有使用它),但我只是看了看,我找不到提到这一点。

于 2009-10-06T21:56:58.623 回答
0

它被认为是标准做法,因为它现在是新版本 PHP 的默认设置。

您可以在使用之前不设置变量而侥幸逃脱,通常会有少量警告,因此立即决定(您知道它不会产生巨大影响)是关闭它们。

如果您正确编程,则不需要

在我继承一个系统之前,我已经将所有警告设置为关闭,因为修复那里的工作是不可行的。

有关更多信息,这里是用于错误报告的 PHP 页面

:)

于 2009-10-06T22:01:12.603 回答
0

是的,它被认为是标准(尽管有好与坏的意见)实践。根据 PHP 手册

在 PHP 4 和 PHP 5 中,默认值为 E_ALL & ~E_NOTICE。此设置不显示 E_NOTICE 级别错误。您可能希望在开发过程中展示它们。

显示通知可以帮助容易出现错字的调试,但我想不出我曾经因为看不到它们而被咬到屁股的时候(我是一个很好的打字员)。我想这对于具有 Java 背景的人来说是一个震惊,虽然......

于 2009-10-06T22:01:54.270 回答
0

不确定它是否如上所述,但本地开发服务器如:

  • 赞普;
  • 兰普;
  • 曼普;
  • 旺旺;

和许多其他有 PHP 错误设置来报告所有错误和通知。等于error_reporting(E_ALL);

但是,如果您需要这些快速代码来检查代码中的通知或错误,请设置服务器将为特定 PHP 脚本执行的当前错误报告级别:

显示错误但不显示通知:

error_reporting(E_ALL & ~E_NOTICE | E_STRICT);

显示一切:

error_reporting(E_ALL);

仅显示错误:

error_reporting(E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR);

您只需在一开始就在您的 PHP 脚本中添加这些行之一。

PS:在您的托管服务器中显示通知不是一个好主意。当您发送到托管服务器时,请务必删除这些行


如果您希望将 PHP.ini 配置更改为这些值之一。

打开你的 PHP.ini 配置文件,大约 514º 行有默认的错误报告级别。

打开这个有帮助。

问候

编辑:这是 514º 线而不是 504º。对不起

于 2009-10-06T22:28:29.640 回答
0

The default php.ini file shipped with the official distribution is a bit schizophrenic. On the one hand, it claims to be good for development (e.g. shows errors) but then it has Notices turned off along with a note that turning them on would be good for development. (I actually filed a bug about this, but it was closed as they clearly didn't want to fix this.) IME, Most developers do not change this default because most of them don't know they can. So I see a lot of PHP code that generates Notices for this reason.

If you have a choice, turn Notices on. Then go and fix code that does daft things like use unset variables and what not. Your code will be better for it.

于 2009-10-06T23:50:56.447 回答