靜態延遲綁定:static 關鍵字 原

靜態延遲綁定:static 關鍵字

靜態方法可以作爲工廠方法,工廠方法是生成包含類的實例的一種方法,例如如下代碼

abstract class DomainObject{
}

class User extends DomainObject{
    public static function create(){
        return new User();
    }
}

class Document extends DomainObject{
    public static funtion create(){
        return new Documnet();
    }
}

如果把create()放在超類

abstract class DomainObject{
    public static function create(){
        return new self();
    }
}

class User extends DomainObject{
}

class Document extends DomainObject{
}
Document ::create();

但是事實上self指的不是調用上下文,它指的是解析上下文,因此self被解析爲定義create()DomainObiect,而不是解析爲調用selfDocument類。php5.3 引入了延遲靜態綁定的概念,static類似於self,但它指的是被調用的類而不是包含類,在本例中,它的意思是調用Document::create()將生成一個Document對象,而不是實例化一個DomainObject對象

abstract class DomainObject{
    public static function create(){
        return new static();
    }
}

class User extends DomainObject{
}

class Document extends DomainObject{
}
Document ::create();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章