1. 程式人生 > >php中後期靜態繫結(延遲靜態繫結)技術

php中後期靜態繫結(延遲靜態繫結)技術

定義一個父類
這就要用到後期靜態繫結的技術,所謂後期,是指靜態方法的呼叫者,只有在執行狀態下才進行動態繫結,使用關鍵字 static 來實現,
此時, static 就像一個變數,始終與當前的呼叫類是繫結的
class Father{

        public static $money = 50000;

        //靜態方法
        public static function  getClass()
        {
            //返回當前的類名
            return __CLASS__;
        }

        //靜態方法: 訪問當前類中的其它靜態成員
        public static function getMoney()
        {
             // return self::getClass().'=>'.self::$money;
            //後期靜態繫結,使用static,在靜態繼承的上下文中,動態的與呼叫類繫結(動態設定靜態成員的呼叫者(主體))
             return static::getClass().'=>'.static::$money;
        }
}


class Son extends Father {

    //覆寫父類靜態屬性
    public static $money = 30000;

    //覆寫父類中的靜態方法
    public static function getClass()
    {
        return  __CLASS__;
    }

}

 echo Father::$money.'<br>';
//呼叫父類的靜態方法,獲取父類類名
 echo Father::getClass().'<br>';
//獲取父類中其它靜態成員的相關資訊
 echo Father::getMoney().'<hr>';


 echo Son::$money.'<br>';

//子類呼叫父類的靜態方法
//Son類覆寫了Father類的getClass(),呼叫子類已重寫的方法,返回子類名稱
 echo Son::getClass().'<br>';

//因為Son類繼承了Father類,所以也可以直接訪問父類中的getMoney()方法
//因為沒有子類Son中對getMoney()進行覆寫,所以訪問的還是Father類中的資料
 echo Son::getMoney().'<hr>';

//此時我再用父類呼叫getMoney(),static 也會自動與 Father類繫結
echo Father::getMoney();