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

相關文章
相關標籤/搜索