我参加了一个前端职位的测试面试,公司甚至想知道我的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();
我不得不说代码将显示什么,我说“什么都没有,因为显示是受保护的,而且error_reporting(0)不会让任何错误显示。”是这样的吗?
有人告诉我,这将产生一个致命的错误,即使在error_reporting(0)中也会显示。考试在纸上,所以我不知道正确的答案。
发布于 2016-10-04 21:49:09
忘记类、受保护的方法和设计。都是误导。
<?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不能解析脚本,这会导致"Parse错误:语法错误.“。是否启用错误报告?第2行与此无关,脚本从未执行。参考加载的配置是因为PHP加载得很好(例如,php.ini设置)。如果启用错误报告,则报告Parse error: syntax error。是否显示错误?这取决于环境和其他配置,如CLI中的display_errors、log_error。让我们假设一个直接使用display_errors=1的Apache环境,然后显示错误。
错误报告设置是关于报告错误的。这并不意味着它们将被显示出来。错误可能会被记录,而不会显示,例如,出于安全原因。尽管如此,请注意,如果禁用了错误报告,那么是否启用了它们并不重要,因为没有什么可显示的。
发布于 2016-10-04 20:43:22
E_ERROR错误级别(对应于致命错误)等于1,这意味着error_reporting(0);也会取消这些错误。
然而,error_reporting()函数可能是残废。这可能就是那个人不这么想的原因。
https://stackoverflow.com/questions/39861171
复制相似问题