总结:
第一点静态,也就是说这个功能只适用于静态属性或静态方法。
第二点延迟绑定
//静态继承的上下文环境中, 调用被子类重写的静态方法,使用关键字static, 代替掉self
class A{ static $name = "父类"; public function printName(){ echo self::$name."\n"; self::fun(); } static function fun(){ echo "A Class\n"; } } class B extends A{ static $name = "子类"; static function fun(){ echo "B Class\n"; } } $obj = new B(); $obj->printName(); // 输出结果 // 父类 // A Class
点击 "运行实例" 按钮查看在线实例
class A{ static $name = "父类"; public function printName(){ echo static::$name."\n"; static::fun(); } static function fun(){ echo "A Class\n"; } } class B extends A{ static $name = "子类"; static function fun(){ echo "B Class\n"; } } $obj = new B(); $obj->printName(); // 输出结果 // 子类 // B Class
点击 "运行实例" 按钮查看在线实例
总结:
后期静态绑定本想通过引入一个新的关键字表示运行时最初调用的类来绕过限制。简单地说,这个关键字能够让你在上述例子中调用 test() 时引用的类是 B 而不是 A。最终决定不引入新的关键字,而是使用已经预留的 static 关键字。
实例:
大家可以在项目中自行挖掘使用场景,比如一个会员父类 class Vip
下面两个子类分别是 超级会员 svip 和 年费会员 yvip
可以在两个子类中分别重写 static usergroup() 方法 或者其他静态属性 ,父类中使用延迟静态绑定