在PHP中访问父属性和重写方法

Aus*_*yde 6 php oop inheritance

我有以下父母和子课程:

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()";
    }
}
Run Code Online (Sandbox Code Playgroud)

预期产量:

array(1,2,3)
ChildObj::method()
array(1,2,3)
Run Code Online (Sandbox Code Playgroud)

实际输出:

array(1,2,3)
ParentObj::method()
NULL
Run Code Online (Sandbox Code Playgroud)

问题是,子对象无法访问数据属性,父对象拒绝调用子进程中的重写方法.

我做错了什么,或者有没有任何想法?

编辑:我应该澄清我正在实例化ChildObj$child = new ChildObj()

Gre*_*reg 10

您已声明data为私有,因此ChildObj将无法访问它 - 您需要将其保护为:

protected $data;
Run Code Online (Sandbox Code Playgroud)

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


Aus*_*yde 0

好吧,问题是这些方法实际上被声明为私有,而不是像我的帖子中那样公开,因此遭受与 $data 属性相同的症状。