我不确定这是否可能,但这里有。我想在子类中设置受保护变量的值,然后从父类访问该值。这就是我的尝试:
class A {
protected $a;
public function __construct() {
new B;
echo "Parent Value: {$this->a}";
}
protected function setter($value) {
$this->a = $value;
}
}
class B extends A {
public function __construct() {
$this->setter('set value');
echo "Child Value: {$this->a}<br />";
}
}
new A;
我希望上面代码的输出为:
Child Value: set value
Parent Value: set value
但是我得到以下内容:
Child Value: set value
Parent Value:
是否可以在子类中设置受保护变量的值,然后在父类中访问该值?如果不是,我将如何实现这一目标?
答案 0 :(得分:1)
您可以设置值并从子类中访问它而不会出现任何问题 - 当您在B
- 类构造函数中生成A
- 类对象时,实际上是这样做了 - 但问题是使用您的代码就是生成父对象,并在该父对象的构造函数中生成子类的新对象。
所以发生的事情是:
A
对象,A
类的构造函数运行; B
对象。 这是一个新对象,与您当前的A
对象无关; B
对象的构造函数并回显它(基本上回答您自己的问题),输出的第一行是预期的; A
对象的构造函数,丢弃生成的B
- 类对象并回显$this->a
的值,但是没有为该对象设置该值,所以你什么也没得到。我有点困惑为什么你想在父的构造函数中构造一个子对象。通常我会构造一个B
对象,并且在该对象的构造函数中,在执行B
特定的东西之前首先调用父构造函数。