【发布时间】:2010-12-29 15:08:31
【问题描述】:
在我的脚本中使用error_reporting() 或ini_set('error_reporting') 时,两者之间是否存在任何功能差异?一种方法优于另一种方法吗?
值得一提的是,我看到许多框架都使用error_reporting(),但这两个选项似乎只在运行时设置,然后在脚本执行后在 php.ini 中重置为默认值。
【问题讨论】:
标签: php error-reporting
在我的脚本中使用error_reporting() 或ini_set('error_reporting') 时,两者之间是否存在任何功能差异?一种方法优于另一种方法吗?
值得一提的是,我看到许多框架都使用error_reporting(),但这两个选项似乎只在运行时设置,然后在脚本执行后在 php.ini 中重置为默认值。
【问题讨论】:
标签: php error-reporting
唯一的小功能差异似乎是ini_set 在无法更改设置时返回false,而error_reporting 总是返回旧的错误级别。
【讨论】:
ini_set('error_reporting') 和error_reporting() 之间的区别,而不是ini_set() 处理指令名称错误的方式。
php.ini 中阻止在运行时更改某些设置的可能性。所以我假设如果在运行时更改错误级别在 php.ini 中被禁用(不确定这是否可能,但我认为是)ini_set() 将返回false 而error_reportingwill,至少根据手册, 总是返回旧的错误级别。
“通往罗马的两条路”:ini_set('error_reporting', ) 覆盖了 php.ini 文件中设置的参数。 error_reporting() 接收级别编号或级别 ID
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
这两个选项都会在脚本结束执行之前生效。下一个将再次使用 .ini 中定义的参数。
【讨论】:
它们在功能上是相同的,但如果您使用的 IDE 知道 PHP 函数名称,这是一种确保您不会意外输入要设置的指令名称的简单方法。
来自PHP's Manual Entry for error_reporting() 的示例部分:
// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
【讨论】:
此外,即使文档声明 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')。
【讨论】: