如何使用链方法访问扩展类中的公共变量?

时间:2018-06-19 05:52:25

标签: class php-7 extends

我做了很多研究,但我找不到这个。我遇到的唯一问题是:在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

1 个答案:

答案 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();