abstract: 后期静态绑定。用于在继承范围内引用静态调用的类。该功能从语言内部角度考虑被命名为”后期静态绑定“。”后期绑定“的意思是说,static::不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为”静态绑定“,因为它可以用于(但不限于)静态方法的调用。<?phpclass Father{
后期静态绑定。用于在继承范围内引用静态调用的类。该功能从语言内部角度考虑被命名为”后期静态绑定“。”后期绑定“的意思是说,static::不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为”静态绑定“,因为它可以用于(但不限于)静态方法的调用。
<?php
class Father{
public static $money = 50000;
//静态方法
public static function getClass()
{
//返回当前的类名
return __CLASS__;
}
//静态方法: 访问当前类中的其它静态成员
public static function getMoney()
{
// return self::getClass().'=>'.self::$money;
//后期静态绑定,使用static,在静态继承的上下文中,动态的与调用类绑定(动态设置静态成员的调用者(主体))
return static::getClass().'=>'.static::$money;
}
}
class Son extends Father {
//覆写父类静态属性
public static $money = 30000;
//覆写父类中的静态方法
public static function getClass()
{
return __CLASS__;
}
}
echo Father::$money.'<br>';
//调用父类的静态方法,获取父类类名
echo Father::getClass().'<br>';
//获取父类中其它静态成员的相关信息
echo Father::getMoney().'<hr>';
echo Son::$money.'<br>';
//子类调用父类的静态方法
//Son类覆写了Father类的getClass(),调用子类已重写的方法,返回子类名称
echo Son::getClass().'<br>';
//因为Son类继承了Father类,所以也可以直接访问父类中的getMoney()方法
//因为没有子类Son中对getMoney()进行覆写,所以访问的还是Father类中的数据
echo Son::getMoney().'<hr>';
//此时我再用父类调用getMoney(),static 也会自动与 Father类绑定
echo Father::getMoney();
Correcting teacher:天蓬老师Correction time:2019-04-11 09:06:01
Teacher's summary:关于静态绑定有点难理解, 其实也不难, 只要记得他用在静态继承的上下文中就可以