2

意図的に「エラーが発生しました」というエラーを出力しようとしていますが、代わりに「成功」​​というメッセージが表示されますか?

理由はありますか?

ありがとう

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

2 に答える 2

5

親コンストラクターを呼び出すのを忘れました:

class RestfulRequest extends Restful
{
  public function __construct()
  {
     parent::__construct(); // <-- added
     if (count($this->error) > 0)
     {
        exit('There is an error');
     }
于 2013-02-15T12:02:21.280 に答える
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';
  }

お役に立てば幸いです。

于 2013-02-15T12:03:48.797 に答える