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

Difference between error_reporting() and ini_set('error_reporting')?

提问人:Jeff 提问时间:12/24/2009 最后编辑:Jeff 更新时间:4/4/2015 访问量:10355

问:

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

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

PHP 错误报告

评论


答:

4赞 Dereleased 12/24/2009 #1

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

来自 PHP 的 error_reporting() 手动输入的示例部分:

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

评论

1赞 Jeff 12/24/2009
呃,我的 IDE(记事本++)都错了。不过,输入很好。
1赞 Dereleased 12/24/2009
最近(也就是过去六年左右),我只使用过Komodo(90%)和jEdit,它们都知道这些功能。
10赞 Pekka 12/24/2009 #2

唯一微小的功能差异似乎是,当它无法更改设置时返回,并且始终返回旧的错误级别。ini_setfalseerror_reporting

评论

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

“Two roads leads you to Rome”: ini_set('error_reporting', ) 覆盖 php.ini 文件中设置的参数。error_reporting() 接收级别编号或级别 ID

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

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

1赞 Pacerier 1/26/2015 #4

此外,尽管文档指出error_reporting的签名是:

int error_reporting ([ int $level ] )

,这并不完全正确,因为您可以设置一个字符串并使用以下命令将其读回: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')