1. 程式人生 > >php面對物件之延遲靜態繫結:static關鍵字

php面對物件之延遲靜態繫結:static關鍵字

先看一段程式碼:

abstract class domainObject{
    static $name = 'domain';
    public static function create(){
        return self::$name;
    }
}
class document extends domainObject{
    static $name = 'document';
}
var_dump(document::create());

執行結果:string ‘domain’ (length=6)
self被解析為定義create()的domainObject,而不是解析為呼叫self的document類;
通過引入延遲靜態繫結概念,將上述程式碼中父類的self:: 替換為static::,

abstract class domainObject{
    static $name = 'domain';
    public static function create(){
        return static::$name;
    }
}
class document extends domainObject{
    static $name = 'document';
}
var_dump(document::create());

執行結果即為:string ‘document’ (length=8)
延遲靜態繫結可使php在子類中查詢所有的屬性、值