类继承中的“ this”,PHP

Haozhuo Huang

我是PHP新手,有两个问题。当我尝试以下代码时:

<?php
class Base{
    public function getId(){
        return $this->id;
    }
};


class Derived extends Base{
   public $id = 1;

   public function id(){
       return $this->id;
   }

};


$d1 = new Derived();

echo $d1->id();//echo 1
echo $d1->getId();//echo 1
?>

上面的代码将回显两个1。

但是,当我尝试以下代码时:

<?php
class Base{
    public function getId(){
        return $this->id;
    }
};


class Derived extends Base{
    private $id = 1;
    public function id(){
        return $this->id;
    }
};

$d1 = new Derived();

echo $d1->id();//echo 1
echo $d1->getId();//Cannot access private property Derived::$id
?>

第二个函数调用将给我一个错误“无法访问私有属性Derived :: $ id”。所以我的问题是,当我制作$ d1-> getId()时,Base中的$ this是什么?

我很困惑,如果$ this指向d1实例,那么它应该能够访问私有$ id。但是,如果$ this指向$ d1内的Base,那么如何从Derived类获取$ id属性?谢谢!

HPierce

所以我的问题是,当我制作$ d1-> getId()时,Base中的$ this是什么?

$this是使用new任何类关键字创建的实例化对象的实例-不是类本身,而是该类的实例在你的情况,因为你创造了$d1new Derived()$this是派生的一个实例。Base无法访问Derived的私有属性,因为基本私有属性是定义它们的类专有的。它们不与继承的类共享。

如何从Derived类获取$ id属性?

您正在寻找受保护的可见性:

<?php
class Base{
    public function getId(){
        return $this->id;
    }
};


class Derived extends Base{
    protected $id = 1;
    public function id(){
        return $this->id;
    }
};

$d1 = new Derived();

echo $d1->id();
echo $d1->getId();
?>

受保护的可见性与与其一起继承的其他类共享。

但是,期望属性在派生类上存在是不好的做法。您不能保证派生类指定该属性。您可以考虑将基础定义为抽象并检查其存在。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章