靜態延遲綁定: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
,而不是解析爲調用self
的Document
類。php5.3 引入了延遲靜態綁定的概念,static
類似於self
,但它指的是被調用的類而不是包含類,在本例中,它的意思是調用Document::create()
將生成一個Document
對象,而不是實例化一個DomainObjec
t對象
abstract class DomainObject{
public static function create(){
return new static();
}
}
class User extends DomainObject{
}
class Document extends DomainObject{
}
Document ::create();