摘要类的继承类不会抛出致命错误; undefined函数叫做致命的错误

时间:2014-06-09 19:54:59

标签: php oop abstract-class

我错过了一些错误报告模式,以便此代码:

<?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上运行它,带有display_errors 1的php.ini会抛出此错误:

  

致命错误:类剑包含1个抽象方法,因此必须在第10行的/public_html/test.php中声明为abstract或实现其余方法(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 ...

1 个答案:

答案 0 :(得分:2)

您没有看到错误,因为您的 php.ini 文件已将display_errors设置为0.通常情况下,使用ini_set('display_errors',1)即可,except in the case of a fatal error:< / p>

  

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

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

  

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

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