扩展抽象类时出现意外结果


unexpected result when extending abstract class

我试图故意打印一个错误"There is a error",但却得到了"Success"消息?

知道为什么吗?

感谢

abstract class Restful
{
  public $error = array();
  public function __construct()
  {
     //Doing something here
     //....
     //....
     $this->validate_params();
  }
  public function validate_params()
  {
     $this->error[] = 'test error';
  }
}
class RestfulRequest extends Restful
{
  public function __construct()
  {
     if (count($this->error) > 0)
     {
        exit('There is an error');
     }
     echo 'Success';
  }
}
new RestfulRequest();

您忘记调用父构造函数:

class RestfulRequest extends Restful
{
  public function __construct()
  {
     parent::__construct(); // <-- added
     if (count($this->error) > 0)
     {
        exit('There is an error');
     }

使用PHP的类扩展机制,当您重写一个方法时,只调用被重写的方法;除非显式调用,否则不会调用父类中的方法。

因此,在您的示例中,从未调用基类中的__construct()方法。

为了执行您想要的操作,您需要使RestfulRequest::__construct()方法显式地调用它的父方法,如下所示:

public function __construct()
  {
     parent::__construct();    //add this line!
     if (count($this->error) > 0)
     {
        exit('There is an error');
     }
     echo 'Success';
  }

希望能有所帮助。