静态延迟绑定: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();