【问题标题】:Accessing parent properties and overridden methods in PHP在 PHP 中访问父属性和覆盖的方法
【发布时间】:2009-06-29 13:10:55
【问题描述】:

我有如下的父类和子类:

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

问题是,子对象无法访问数据属性,父对象拒绝调用子对象中被覆盖的方法。

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

编辑:我应该澄清一下,我将 ChildObj 实例化为 $child = new ChildObj()

【问题讨论】:

  • 好的,将私有更改为受保护修复了属性访问。

标签: php oop inheritance


【解决方案1】:

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

protected $data;

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多