提问人:Jeff 提问时间:12/24/2009 最后编辑:Jeff 更新时间:4/4/2015 访问量:10355
error_reporting() 和 ini_set('error_reporting') 之间的区别?
Difference between error_reporting() and ini_set('error_reporting')?
问:
使用脚本或在我的脚本中时,两者之间是否有任何功能差异?一种方法是否优于另一种方法?error_reporting()
ini_set('error_reporting')
值得一提的是,我看到许多框架使用 ,但这两个选项似乎仅在运行时设置,然后在脚本执行后在 php.ini 中重置为默认值。error_reporting()
答:
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_set
false
error_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.ini
false
error_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')
评论