php protected 重写


在 PHP 中,有许多访问控制修饰符可以用来限制对类成员的访问。在本文中,我将重点介绍其中之一,即 protected。protected 修饰的成员可以被其所属类及其子类访问。本文将讨论如何通过重写 protected 成员来实现对父类成员的扩展。
一个类的实例可以访问其自身和其祖先类中的 public 成员,但不能访问其祖先类中声明为 protected 或 private 的成员。比方说,假设我们有一个父类 Car,它有一个 protected 属性 $gas。如果我们定义了一个子类 SportsCar,我们可以通过从 SportsCar 中试图访问 $gas 来了解访问权限的影响。我们可以在 SportsCar 中定义一个方法来获取 $gas 属性的值:
class Car{protected $gas = 'unleaded';}class SportsCar extends Car{public function getGas(){return $this->gas;}}$sportsCar = new SportsCar();echo $sportsCar->getGas(); // 报错:Fatal error: Uncaught Error: Cannot access protected property SportsCar::$gas
代码执行将导致致命错误。这是因为通过 $this->gas,我们试图访问父类 Car 中声明为 protected 的成员 $gas。
为了覆盖一个父类的 protected 属性,我们可以在子类中定义同名的 protected 属性。如下所示:
class SportsCar extends Car{protected $gas;public function __construct(){$this->gas = 'premium';}public function getGas(){return $this->gas;}}$sportsCar = new SportsCar();echo $sportsCar->getGas(); // 输出 premium
现在,我们覆盖了父类 Car 中的 protected $gas 属性。必须注意的是,我们没有使用任何关键字来声明子类属性 $gas 的访问控制,因为这个属性是应该保护的。
另外需要注意的是,父类的方法可以访问子类中的 protected 的属性。因此,如果我们在父类中定义一个方法,它试图访问子类覆盖的属性,不会出现上述的访问限制。如下所示:
class Car{protected $gas = 'unleaded';public function setGas($gas){$this->gas = $gas;}public function getGas(){return $this->gas;}}class SportsCar extends Car{protected $gas;public function __construct(){$this->gas = 'premium';}public function setGas($gas){parent::setGas($gas);$this->gas = $this->getGas();}public function getGas(){return $this->gas;}}$sportsCar = new SportsCar();echo $sportsCar->getGas(); // 输出 premium <br>$sportsCar->setGas('diesel');echo $sportsCar->getGas(); // 输出 diesel
在这个示例中,我们在父类 Car 中定义了 setGas() 方法,在子类 SportsCar 中对其进行了重写,以使用子类中的属性 $gas 覆盖父类中的属性 $gas。此外,在子类中的 getGas() 方法也被重写,它返回子类属性 $gas 的值。我们注意到,当我们调用子类 SportsCar 的 setGas() 方法时,它首先在父类 Car 中执行,然后在子类 SportsCar 中访问子类的属性 $gas。接下来,在调用子类 SportsCar 的 getGas() 方法时,它返回子类的属性 $gas 值,而不是父类的属性 $gas 值。

上一篇:php programming

下一篇:php process 5.3.3


Copyright © 2002-2019 测速网 www.inhv.cn 皖ICP备2023010105号
测速城市 测速地区 测速街道 网速测试城市 网速测试地区 网速测试街道
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!

热门搜索 城市网站建设 地区网站制作 街道网页设计 大写数字 热点城市 热点地区 热点街道 热点时间 房贷计算器