error_reporting() 和 ini_set('error_reporting') 的区别?

Posted

技术标签:

【中文标题】error_reporting() 和 ini_set(\'error_reporting\') 的区别?【英文标题】:Difference between error_reporting() and ini_set('error_reporting')?error_reporting() 和 ini_set('error_reporting') 的区别? 【发布时间】:2010-12-29 15:08:31 【问题描述】:

在我的脚本中使用error_reporting()ini_set('error_reporting') 时,两者之间是否存在任何功能差异?一种方法优于另一种方法吗?

值得一提的是,我看到许多框架都使用error_reporting(),但这两个选项似乎只在运行时设置,然后在脚本执行后在 php.ini 中重置为默认值。

【问题讨论】:

【参考方案1】:

唯一的小功能差异似乎是ini_set 在无法更改设置时返回false,而error_reporting 总是返回旧的错误级别。

【讨论】:

不完全是;当设置不存在时,ini_set 返回 false。它需要一个字符串,因此任何可以解释为字符串的东西都会被转换。例如,如果您将对象传递给它,PHP 会生成警告并返回 null,这与传递对象(即没有 __toString() 方法的对象)时 error_reporting 的行为相同。重点是,他的问题是ini_set('error_reporting')error_reporting() 之间的区别,而不是ini_set() 处理指令名称错误的方式。 我应该澄清一下,当我说“它需要一个字符串”时,我指的是第二个参数,正在设置的设置的值,其他一切都指的是那个。 @Dereleased,我认为 ini_set 返回 false 是基于在 php.ini 中阻止在运行时更改某些设置的可能性。所以我假设如果在运行时更改错误级别在 php.ini 中被禁用(不确定这是否可能,但我认为是)ini_set() 将返回falseerror_reportingwill,至少根据手册, 总是返回旧的错误级别。【参考方案2】:

“通往罗马的两条路”:ini_set('error_reporting', ) 覆盖了 php.ini 文件中设置的参数。 error_reporting() 接收级别编号或级别 ID

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

这两个选项都会在脚本结束执行之前生效。下一个将再次使用 .ini 中定义的参数。

【讨论】:

【参考方案3】:

它们在功能上是相同的,但如果您使用的 IDE 知道 PHP 函数名称,这是一种确保您不会意外输入要设置的指令名称的简单方法。

来自PHP's Manual Entry for error_reporting() 的示例部分:

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

【讨论】:

呸,我的 IDE (notepad++) 都弄错了。不过很好的意见。 最近(也就是最近六年左右)我只用过Komodo(90%)和jEdit,他们都知道这些功能。【参考方案4】:

此外,即使文档声明 error_reporting 的签名是:

int error_reporting ([ int $level ] )

,这并不完全正确,因为您可以设置一个 string 并用ini_get 回读:

error_reporting('123 hello world');

var_dump(ini_get('error_reporting'));

产生:

string(15) "123 hello world"

所以,error_reporting($x) 在语义上等价于ini_set('error_reporting', $x)

并且error_reporting() 在语义上等同于(int)ini_get('error_reporting')

【讨论】:

以上是关于error_reporting() 和 ini_set('error_reporting') 的区别?的主要内容,如果未能解决你的问题,请参考以下文章

error_reporting(E_ALL) 和 error_reporting(E_ALL & ~E_NOTICE) 有啥区别

PHP error_reporting 抑制通知和警告

PHP错误日志控制(display_errors和error_reporting)

PHP error_reporting() 函数

error_reporting 报错

PHP error_reporting() 错误控制函数功能详解