静态延迟绑定: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();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章