php中后期静态绑定(延迟静态绑定)技术

定义一个父类
这就要用到后期静态绑定的技术,所谓后期,是指静态方法的调用者,只有在运行状态下才进行动态绑定,使用关键字 static 来实现,
此时, static 就像一个变量,始终与当前的调用类是绑定的
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();

猜你喜欢

转载自blog.csdn.net/qq_36672905/article/details/84668757