如何在使用__construct的Parent类设置的Child类中访问公共属性?
例如:
class Parent
{
protected $pVariableParent = 'no info'; //This have to be set for all classes
public function __construct()
{
$this->setPVariable(); //Changing the property when class created.
}
public function setPVariable(){
$this->pVariableParent = '123';
}
}
Class Child extends Parent
{
public function __construct()
{
if(isset($_GET['info']){
echo $this->pVariableParent;
}
}
}
$pInit = new Parent;
$cInit = new Child;
在此状态下,请求site.php/?info
会显示no info
。但如果我从Child调用$this->setPVariable();
,则一切正常并显示123
。为什么我无法从Parent访问已更改的属性?是因为当我调用Child类时,它只是读取所有父类的属性和方法,但是没有触发任何构造函数?什么是最好的方法呢?感谢名单。
答案 0 :(得分:3)
问题是你覆盖了父构造函数,所以在子构造函数中没有调用setPVariable
。
扩展父构造函数而不是覆盖:
Class Child extends Parent
{
public function __construct()
{
parent::__construct();
if(isset($_GET['info']){
echo $this->pVariableParent;
}
}
}
http://php.net/manual/it/keyword.parent.php
让我试着澄清一点:
为什么我无法从Parent访问已更改的属性?
因为该属性尚未更改。您正在创建两个单独的对象; $pInit
是父类的实例,其属性值在构造函数中更改。 $cInit
是子类的实例,其属性值未更改,因为您重写构造函数并且子类不更改属性值。$pInit
和$cInit
不相关(除了按类型),它们肯定不会影响彼此的内部结构。