error_reporting指令对什么有影响


on what does the error_reporting directive impacts?

从我读到这个指令指定什么类型的错误将报告给脚本输出(如果显示错误是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: