我有一个前端职位的测试面试,公司甚至想知道我的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)也会显示。 测试在纸上,所以我不知道正确的答案。
答案 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_errors
,log_error
。让我们假设一个带有display_errors=1
的直接Apache环境,然后显示错误。
错误报告设置与报告错误有关。这并不意味着它们会被显示出来。可能会记录错误而不会显示错误,例如出于安全原因。尽管如此,请注意,如果禁用错误报告,则启用它们并不重要,因为无法显示任何内容。
答案 1 :(得分:0)
E_ERROR
错误级别(对应于致命错误)等于1,这意味着error_reporting(0);
也会抑制这些错误。
但error_reporting()
函数可能是disabled at all。这可能就是那个人不这么认为的原因。