从我读到这个指令指定什么类型的错误将报告给脚本输出(如果显示错误是on)或将报告给error_logs(如果log_errors是on)。
为什么在下一个脚本中,我将 error_reporting
设置为0(关闭error_reporting),仍然得到描述致命错误的消息?
<?php
error_reporting(0) ;
function a(&$name)
{
}
a("gg") ; // cause a fatal error, and display the message
echo "gg" ;
?>
错误是:
致命错误:只有变量可以通过引用
传递
由于error_reporting
是一个函数调用,因此必须执行它才能生效。但是在执行脚本中的任何内容之前,必须对整个脚本进行解析。如果存在解析错误,则不会运行任何内容,因此无法更改错误报告。所以解析错误总是根据php.ini
中的错误报告设置来报告。
在您的脚本中,当函数声明为接受引用形参时,会改变解析对函数调用的方式。它不允许任何表达式作为参数,而是要求它具有变量的语法。因为"gg"
不是一个变量,所以在解析过程中会得到一个致命的错误。
error_reporting
控制只能在运行时检测到的错误报告,通常是由于变量的值。例如:
$numerator = 1;
$denominator = 0;
error_reporting(E_ALL);
echo "WIth error reporting: ";
echo $numerator/$denominator;
echo "<br>";
error_reporting(0);
echo "WIthout error reporting: ";
echo $numerator/$denominator;
echo "<br>";
这将报告第一个除法的错误,但不会报告第二个除法的错误:
WIth error reporting:
Warning: Division by zero in /private/var/folders/ts/tsRTg2iv2RW88k+8ZOgz7++++TY/-Tmp-/1B4537F5-61D1-487A-9062-9204D7A058D3 on line 9
WIthout error reporting: