在扩展类中使用变量的新值

这是我的示例代码:


class Dad {

    protected $name = 'Alex';


    public function setName($string)

    {

        $this->name = $string;

    }

}



class Son extends Dad{


    public function showName()

    {

        return $this->name;

    }

}


我使用这样的类:


            $dad = new Dad();

            $dad->setName('John');



            $son = new Son();

            echo $son->showName();//it echo Alex but i need to echo John

我在父类和子类中使用了许多受保护的变量,这只是示例。我如何使用子类中受保护变量的新值?


慕桂英4014372
浏览 97回答 1
1回答

芜湖不芜

你有 2 个对象。对象中的默认名称是“Alex”。因此,当您创建一个新对象并且未明确为其命名时,它将使用“Alex”,因为这是默认设置。$p = new Dad;// name is Alex.$q = new Son;// name is Alex$p->setName('John'); // Now the name of $p is John$q->setName('Beto'); // Now the name of $q is Beto. $p remains unchanged.这是对象的要点,它们是分开的。如果您想要一种更改默认名称的方法,那么您可以这样做。class Dad{    protected $name;    static protected $defaultName = 'Alex';    public function __construct()    {        $this->name = self::$defaultName;    }    public function showName()    {        return $this->name;    }    public static function setDefault($name)    {        self::$defaultName = $name;    }}现在:$p = new Dad; // $p->name is 'Alex'Dad::setDefault('Bernie');$q = new Dad; // $q->name is 'Bernie', $p is not changed$r = new Dad; // $r->name is 'Bernie'Dad::setDefault('Walt');$t = new Dad; // $t->name is Walt希望这可以帮助。
打开App,查看更多内容
随时随地看视频慕课网APP