我做了很多研究,但我找不到这个。我遇到的唯一问题是:在Daddy类中$ name是空的。
我尝试过研究:如何在扩展类中访问公共变量,但似乎他们没有做过这样的事情。我只是不想在Grandpa Class中重新声明变量。我希望它可以在Daddy Class中访问。
我有这个父类
<?php
class GrandPa
{
public $name;
public function name($name)
{
$this->name = $name;
return $this;
}
public function get()
{
$daddy = new Daddy;
return $daddy->displayGrandPaName();
}
}
?>
然后是扩展的:
<?php
class Daddy extends GrandPa // Inherited class
{
public function displayGrandPaName()
{
var_dump($this->name.'ss');
return $this->name;
}
}
?>
当我发起时:
<?php
$g = new GrandPa;
echo $g->name('aw')->get();
?>
var vars:
string(2) "ss"
预期结果将是:
awss
答案 0 :(得分:1)
有关设计注意事项,请参阅我对该问题的评论。
您的问题是,在设置name
对象的$g
属性时,您的get
方法会创建一个全新的(并且相应地,不同的)对象,并获取从中得名。由于您没有在该对象上设置name
,因此它是空白的。这就是你所看到的。
我认为你的设计错误,但是为了从你的对象中获取属性的价值,你的get
方法应该是
public function get()
{
return $this->name;
}
您似乎想要做的更准确的例子是:
class GrandPa
{
public $name;
public function setName($name)
{
$this->name = $name;
return $this;
}
public function getName()
{
return $this->name;
}
}
class Daddy extends GrandPa
{
public function displayName()
{
var_dump($this->name.'ss');
return $this->name;
}
}
$d = new Daddy();
echo $d->setName('aw')->displayName();