-3

我提出另一个问题,因为我认为人们不理解我的老问题:

为什么父类的受保护变量为空?

IE:

class Father {
protected $body;
function __construct()
{

}
public function run()
{
$this->change();
$this->change2();
}
private function change()
{
$this->body = 'new value';
}
private function change2()
{
$this->body = str_replace('value','........','new value');
}
}

class Child extends Father {
function __construct()
{
echo $this->body;
}
}

$father = new Father();
$father->run();
$child = new Child();

body 为空,我需要继续更改 Child 类中的这个变量 body 但它为空,我认为唯一的解决方案是将 body 设置为静态。

很抱歉问了一个类似的问题,但我试图理解它。

编辑:如果我将所有这些 run 方法的代码放在 __construct 和子类调用 parent::__construct() 中,它将再次进行这些更改,我不能再这样做了,因为我需要继续在子类中更改它。

4

1 回答 1

0

我认为 OP 并不理解 OOP。

无论如何,您可以使用static达到这种想要的行为。protected $body;替换为static protected $body;$this->bodyself::body

于 2013-07-03T00:46:48.337 回答