php之static后期绑定/延迟绑定

引出问题

static延迟绑定

class Human {
    public static function whoami() {
        echo '来自父类的whoami在执行<br />';
    }

    public static function say() {
        self::whoami(); // 子类内没有say方法,找到了父类这里
                        // 在这里的self 指的是 父类
    }

    public static function say2() {
        static::whoami();    //  子类也没有say2方法,又找到父类这里
                             // 但是父类用static::whoami,
                             // 指调用你子类自己的whoami方法
    }
}


class Stu extends Human{
    public static function whoami () {
        echo '来自子类的whoami在执行<br />';
    }
}

Stu::say();
Stu::say2();

说明:如果子类也没有whoami()方法,则say2()最后调用的也是父类

延迟绑定再复习

知识点

类常量/静态属性/方法 –> 都是存放在类空间的
类常量用 const来定义

延迟绑定:
是指类的计算self的定义不是以定义时为准,而是以运行时的计算结果为准.

class Animal {
    const age = 1;
    public static $leg = 4;
    public static function cry() {
        echo '呜呜<br />';
    }
    public static function t1() {
        self::cry();
        echo self::age,'<br />';
        echo self::$leg,'<br />';
    }
    public static function t2() {
        static::cry();
        echo static::age,'<br />';
        echo static::$leg,'<br />';
    }
}

class Human extends Animal {
    public static $leg = 2;

    public static function cry() {
        echo '哇哇<br />';
    }
}

class Stu extends Human {
    const age = 16;

    public static function cry() {
        echo '嘤嘤<br />';
    }
}


Stu::t1(); //呜呜,1,4
Stu::t2(); // 嘤嘤,16,2
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值