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

本文介绍了PHP5.3中新增的静态绑定语法,通过具体代码示例展示了如何利用static::实现后期静态绑定,使得调用的方法随上下文变化而变化。此外还介绍了new static()和new self()的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天看laravel框架源码时,发现一个”static::”这样的语法,非常好奇(本人没经过系统培训,勿喷基础知识不行),于是就上php.net查了一下,原来这涉及了一个php5.3版本新增的静态绑定的语法, 好了,不废话,开始做笔记。


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::”;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值