如果有人能向我解释PHP错误处理的架构,我会很高兴。一些具体问题是:
答案 0 :(得分:5)
这就像你怀疑的那样。自定义错误处理程序必须自己探测所有设置并做出相应的反应。
set_error_handler example首先检查当前活动错误级别,并将其与第一个回调参数(按位和)进行比较,该参数表示当前错误类型:
if (!(error_reporting() & $errno)) {
但是为了最初测试你是否真的应该打印错误,你还需要:
ini_get("display_errors") or return;
或者对更多设置做出反应并模拟默认错误处理程序,甚至是ini_get("html_errors")
等。除非您手动执行所有操作,否则您的用户错误处理程序将显示所有错误。它们不会被过滤,回调会收到所有内容。
这里的PHP默认错误处理程序是php_error_cb
:第850行
http://svn.php.net/viewvc/php/php-src/trunk/main/main.c?revision=309647&view=markup#855
它做了一些,但也查询ini注册表。这就是error_reporting
始终将当前状态保存到的地方。