为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕桂英4014372 2021-06-22 17:15:54
这是我的示例代码: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我在父类和子类中使用了许多受保护的变量,这只是示例。我如何使用子类中受保护变量的新值?
查看完整描述

1 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

你有 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

希望这可以帮助。


查看完整回答
反对 回复 2021-06-25
  • 1 回答
  • 0 关注
  • 96 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信