我有以下父母和子课程:
- 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,3)
- ChildObj::method()
- array(1,3)
实际输出:
- array(1,3)
- ParentObj::method()
- NULL
问题是,子对象无法访问数据属性,父对象拒绝调用子进程中的重写方法.
我做错了什么,或者有没有任何想法?
编辑:我应该澄清我将ChildObj实例化为$child = new ChildObj()
您已将数据声明为私有,因此ChildObj将无法访问它 – 您需要将其保护为:
- protected $data;
我的PHP(5.2.8)打印ChildObj :: method() – 你运行的是旧版本吗?