2013-02-15 80 views
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(); 
+1

请参阅有关构造函数和析构函数的文档:http://php.net/manual/en/language.oop5.decon.php特别是“注”在开头 – koopajah 2013-02-15 12:03:52

+0

Echo不应该在一个对象中。使用退货。 – 2013-02-15 12:32:16

+0

搭载。 – BentCoder 2013-02-15 12:35:22

回答

5

你忘了调用父类的构造:

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

谢谢。 10分钟后我会接受。有时眼睛需要大开... – BentCoder 2013-02-15 12:06:26

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'; 
    } 

希望有所帮助。