在PHP中,Fatal Error将显示error_reporting(0)

时间:2016-10-04 20:26:14

标签: php

我有一个前端职位的测试面试,公司甚至想知道我的PHP级别。 我不是很擅长php所以这就是为什么我把问题放在这里。在一个问题中,我有一个名为ClassOne的类,其中包含受保护的方法show()。此课程由ClassTwo扩展。 ClassTwo已实例化,并在其上调用了show方法。 在脚本的顶部,我调用了error_reporting(0)



error_reporting(0);
class ClassOne {
protected function show(){}
}
class ClassTwo extends ClassOne{

}
$obj2 = new ClassTwo(); 
$obj2->show();




我不得不说代码会显示什么,我说"什么都没有,因为show是受保护的,而error_reporting(0)不会让任何错误显示出来。"这是对的吗?

有人告诉我,这会产生致命错误,即使使用error_reporting(0)也会显示。 测试在纸上,所以我不知道正确的答案。

2 个答案:

答案 0 :(得分:1)

忘记类,受保护的方法和设计。这都是误导。

<?php
error_reporting(0);
$obj = new Anything(); 
$obj->do();

是否存在语法错误?不.PHP会解析脚本并开始执行它。在第2行,关闭所有错误报告。在第3行,PHP尝试实例化Anything类。无法找到该课程,这会导致致命错误。错误报告已关闭。没有报告错误。什么都没有显示。

<?php
error_reporting(0);
$obj = new Anything(); 
foo
$obj->do();

是否存在语法错误?是的,在第4行.PHP无法解析脚本,这会导致&#34;解析错误:语法错误...&#34;。是否启用了错误报告?第2行无关紧要,脚本从未执行过。由于PHP加载正常(例如php.ini设置),因此请参阅加载的配置。如果启用了错误报告,则会报告Parse error: syntax error。是否显示错误?它取决于CLI SAPI中的环境和其他配置,例如display_errorslog_error。让我们假设一个带有display_errors=1的直接Apache环境,然后显示错误。

错误报告设置与报告错误有关。这并不意味着它们会被显示出来。可能会记录错误而不会显示错误,例如出于安全原因。尽管如此,请注意,如果禁用错误报告,则启用它们并不重要,因为无法显示任何内容。

答案 1 :(得分:0)

E_ERROR错误级别(对应于致命错误)等于1,这意味着error_reporting(0);也会抑制这些错误。

error_reporting()函数可能是disabled at all。这可能就是那个人不这么认为的原因。