后期静态绑定技术

Original 2019-04-10 20:58:06 215
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();

QQ图片20190410205640.png

Correcting teacher:天蓬老师Correction time:2019-04-11 09:06:01
Teacher's summary:关于静态绑定有点难理解, 其实也不难, 只要记得他用在静态继承的上下文中就可以

Release Notes

Popular Entries