PHP中的后期绑定

先看一个例子:php

<?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();
?>

输出:code

A

若是使用后期绑定:io

<?php
    class A {
        public static function who() {
            echo __CLASS__;
        }
        public static function test() {
            static::who(); // 后期静态绑定从这里开始
        }
    }
    
    class B extends A {
        public static function who() {
            echo __CLASS__;
        }
    }
    
    B::test();
?>

输出:function

B

使用 self:: 或者 CLASS 对当前类的静态引用,取决于定义当前方法所在的类,而不是调用者所在的类。class

“后期绑定”的意思是说,static:: 再也不被解析为定义当前方法所在的类,而是在实际运行时计算的。也能够称之为“静态绑定”,由于它能够用于(但不限于)静态方法的调用。test

相关文章
相关标签/搜索