学科分类
目录
PHP基础

静态延迟绑定

类可以自下往上调用父类方法,如果需要在父类中根据不同的子类,来调用子类的方法,那么就需要延迟静态绑定。所谓延迟静态绑定,就是不再被解析为定义当前方法所在的类,而是获取实际运行方法所在的类。

静态延迟绑定使用static关键字来实现,只适用于对静态属性和静态方法进行延迟绑定。示例代码如下。

 1  class People
 2  {
 3    public static $name = 'People';
 4    public static function showName()
 5    {
 6      echo self::$name;      // 静态绑定
 7      echo static::$name;   // 静态延迟绑定
 8    }
 9  }
 10 class Man extends People
 11 {
 12   public static $name = 'Man';
 13 }
 14 People::showName();      // People People
 15 Man::showName();          // People Man

在上述代码中,Man类继承People类并重写静态属性$name,第6行使用self关键字实现静态绑定,第7行使用static关键字实现静态延迟绑定,当使用子类调用父类的静态方法时,static代表的是当前调用类,所以静态属性$name的输出结果是Man。

对于静态成员来说,若未被子类重写,则所有的子类包括父类都使用的是同一个静态成员。

点击此处
隐藏目录