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

时间:2013-02-15 12:00:14

标签: php

我试图故意打印错误“有错误”但是收到“成功”消息呢?

知道为什么吗?

由于

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();

2 个答案:

答案 0 :(得分:5)

您忘了调用父构造函数:

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

答案 1 :(得分:0)

使用PHP的类扩展机制,当您重写方法时,只调用重写的方法;除非您明确地调用它,否则不调用父类的方法。

因此,在您的示例中,永远不会调用基类中的__construct()方法。

为了做你想做的事,你需要让RestfulRequest::__construct()方法明确地调用它的父方法,如下所示:

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

     echo 'Success';
  }

希望有所帮助。