抽象类's继承类不抛出致命错误;未定义的函数调用会导致致命错误


Abstract class's inherited class not throwing fatal errors; undefined function calls fatal errors bizarely do

我是否缺少一些错误报告模式,以便以下代码:

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
abstract class weapon
 {abstract function fire();}
class sword extends weapon
 {}
echo 'hello world';
?>

实际上会报告一些东西告诉我抽象方法fire()没有在继承类中定义?

当前静默失败,不回显hello world

使用PHP 5.4.24, PHP .ini有display_errors 0


在PHP 5.3.27上运行它,PHP .ini设置display_errors为1,将抛出以下错误:

致命错误:类sword包含1个抽象方法,因此必须声明为抽象或实现/public_html/test.php中第10行剩下的方法(weapon::fire)

有一些有趣的事情

因为一些致命错误会抛出,比如未定义函数:

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
abstract class weapon
 {abstract function fire();}
class sword extends weapon
 {function fire()
      {}}
handle();
echo 'hello world';
?>

此代码抛出Fatal error: Call to undefined function handle() in /test.php on line 13,即使php.ini的display_errors 设置为0…

没有看到错误,因为您的php.ini文件将display_errors设置为0。通常情况下,使用ini_set('display_errors',1)将工作,除了在致命错误的情况下:

虽然display_errors可以在运行时设置(使用ini_set()),但如果脚本有致命错误,它将不起任何作用。这是因为所需的运行时操作没有被执行。

你的脚本确实抛出以下错误:

致命错误:类sword包含1个抽象方法,因此必须声明为抽象或实现其余方法(weapon::fire)

我建议您在开发环境中启用display_errors,这样您就可以始终看到错误。