如何使用链方法访问扩展 class 中的 public 变量?

How to access public variables in extended class using chain method?

我尝试了很多研究,但我找不到这个。我遇到的唯一问题是:class Daddy.

中的 $name 是空的

我尝试研究:how to access public variables in extended class 但他们似乎没有做过这样的事情。我就是不想re-declare爷爷Class里面的变量。我希望它可以在 Daddy Class.

内部访问

我有这个parentclass

<?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 转储:

string(2) "ss"

预期结果为:

awss

有关一些设计注意事项,请参阅我对该问题的评论。

你的问题是,虽然你设置了 $g 对象的 name 属性,但是你的 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();