2009-06-29 157 views
6

覆盖的方法我父类和子类,如下所示:访问父属性和PHP

abstract class ParentObj { 
    private $data; 
    public function __construct(){ 
     $this->data = array(1,2,3); 
     var_dump($this->data); 

     $this->method(); 
    } 
    public function method(){ 
     echo "ParentObj::method()"; 
    } 
} 
class ChildObj extends ParentObj { 
    public function __construct(){ 
     parent::__construct(); 
     var_dump($this->data); 
    } 
    public function method(){ 
     echo "ChildObj::method()"; 
    } 
} 

预期的输出:

array(1,2,3) 
ChildObj::method() 
array(1,2,3) 

实际输出:

array(1,2,3) 
ParentObj::method() 
NULL 

的问题是,子对象无法访问数据属性,而父对象拒绝调用chil中的重写方法d。

我做错了什么,还是有人有什么想法?

编辑:我要澄清,我实例化一个ChildObj为$child = new ChildObj()

+0

好的,将private改为protected以修复属性访问权限。 – 2009-06-29 13:25:59

回答

0

好了,问题是这些方法实际上声明为private,而不是公众在我的岗位,因而遭受同样的症状为$ data属性。

10

您已经声明data为私有,所以ChildObj将无法访问它 - 你需要它,而不是保护:

protected $data; 

我的PHP(5.2.8)打印ChildObj::method() - 你运行的是旧版本?

+0

我使用PHP 5.2.5 – 2009-06-29 13:18:41