php中後期靜態繫結(延遲靜態繫結)技術
阿新 • • 發佈:2018-12-02
定義一個父類
這就要用到後期靜態繫結的技術,所謂後期,是指靜態方法的呼叫者,只有在執行狀態下才進行動態繫結,使用關鍵字 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();