PHP延迟静态绑定

“后期绑定”的意思是说,static:: 再也不被解析为定义当前方法所在的类,而是在实际运行时计算的。
也能够称之为“静态绑定”,由于它能够用于(但不限于)静态方法的调用。
<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        self::who();
    }
}

class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test();
?>

result:Aphp

<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        static::who(); // 注意这里的static
    }
}

class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test();
?>

result:Bcode

B::test()调用时,代码段1中的self::指向的类A,代码段2中的static指向类B,因此结果有所不一样io

使用self::或者 __CLASS__对当前类的静态引用,取决于定义当前方法所在的类,而static::的引用是当前运行的类,因此调用的是当前运行类的方法.function

相关文章
相关标签/搜索