7.3.3 继承与延迟静态绑定
在创建类层次结构时,有时候回遇到这种情况,即父类方法要使用静态类属性,但静态类属性可能在子类中被覆盖。这和 self 关键字的使用有关。我们看一个例子,其中 Employee 类和 Executive 类都做了一些修改:
<?php
class Employee
{
public static $favSport = "Football";
public static function watchTv()
{
echo "Watching ".self::$favSport;
}
}
class Executive extends Employee
{
public static $favSport= "Polo";
}
Executive::watchTv();
执行代码如下:
Watching Football
因为 Executive 类继承了 Employee 类中的方法,有人认为这个例子的输出应该是 Watching Polo 。真是这样吗?实际上不是,这是因为 self 关键字是在编译时确定它的作用范围的,不是在运行时、因此这个例子的输出总是 Watching Football。PHP 解决这个问题的方法是改变一下 static 关键字的用法, 用它来表示我们需要在运行时决定静态属性的作用域。想要完成这个任务,你应该改写一下 watchTv() 方法,如下所示:
public static function watchTv()
{
echo "Watching " . static::$favSport;
}
执行代码如下:文章来源:https://www.toymoban.com/news/detail-507423.html
Watching Polo文章来源地址https://www.toymoban.com/news/detail-507423.html
到了这里,关于第七章 高级 OOP 特性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!