PHP面向对象之延迟静态绑定

php5.3已经开始支持延迟静态绑定。

延迟静态绑定指的是在父类中获取子类的最终状态。在父类中,如果出现self关键字,被子类继承后,这个self值的还是父类而不是子类。

如果在父类中出现了self关键字,并且子类继承了含有self的这段代码,那么需要考虑静态延迟绑定。在父类中使用static代替self.

说到底,self到底表示什么?self用在类中,引用自身的静态成员变量,表示的就是类名,完全可以被类名替换掉。被子类继承之后,self还是表示的父类名,而不是子类self了

Demo
未使用延迟静态绑定
class Par
{
    public static function test()
    {
        echo 'par~~~<br>';
    }

    public static function who()
    {
        self::test();//self当前类的test方法
    }
}

class Son extends Par
{
    public static function test()
    {
        echo 'son~~~<br>';
    }
}

Par::who();//par~~~ 父类的who
Son::who();//par~~~ 父类的who
使用延迟静态绑定
<?php

/**
 * 延迟静态绑定
 * Class Par
 */

class Par
{
    public static function test()
    {
        echo 'par~~~<br>';
    }

    public static function who()
    {
        static::test();//使用延迟静态绑定
    }
}

class Son extends Par
{
    public static function test()
    {
        echo 'son~~~<br>';
    }
}

Par::who();//par~~~ 父类的who
Son::who();//son~~~ 子类的who
总结

static延迟为使用延迟静态绑定static关键词指的是谁调用代表谁
self代表是指调用方法所属的对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值