码迷,mamicode.com
首页 > Web开发 > 详细

【转】PHP中的后期静态绑定(Late Static Bindings )

时间:2018-08-22 22:52:34      阅读:419      评论:0      收藏:0      [点我收藏+]

标签:public   pre   变量   code   提取   ruby   名称   格式   echo   

php5.3版本新增的静态绑定的静态绑定语法,也成为PHP的后期静态绑定,如下


class A{
    public static function func1(){
        echo __CLASS__.PHP_EOL;
    }

    public static function test(){
        self::func1();
    } 
}

class B extend A{
    public static function func1(){
        echo __CLASS__.PHP_EOL;  //__CLASS__是当前类的名称
    }
}

B::test();



结果:A

 

但是,既然B继承了A,并重写了A的func1,那么如果想让test中执行的是B中的func1要怎么做呢?于是,php5.3使用了预留的static关键字,将上述代码中的test函数改成这样:

public static function test(){
        static::func1();
} 

结果:B

也就是说:static::实现了后期静态绑定,static::对应的变量不再是当前类的变量,而是由最终运算时动态决定的(也可以说从堆里面提取出来的关键字)。

同时,在这个学习的过程中,我还发现另外一个用法:new static() 和 new self(), 同样的,new static 就是实例化最终继承的类,而new self就是实例化当前类, new parent就是实现当前类的父类了。

好了,顺便提一下形如这种格式的用法有三种: “self::”、”parent::”、”static::”;

【转】PHP中的后期静态绑定(Late Static Bindings )

标签:public   pre   变量   code   提取   ruby   名称   格式   echo   

原文地址:https://www.cnblogs.com/cfYu/p/9520689.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!