延迟静态绑定:static关键字
延迟静态绑定:static关键字
静态类工厂的实用
这种方法比较麻烦,代码冗余过高
//普通方法
abstract class DomainObject{
}
class User extends DomainObject{
public static function create():User
{
return new User();
}
}
class Document extends DomainObject{
public static function create():Document{
return new Document();
}
}
//延迟静态绑定
> 这种静态绑定,比较理想。
abstract class DomainObject{
public static function create():DomainObject{
return new static();//这里不能用self
}
}
class User extends DomainObject{
}
class Document extends DomainObject{
}
self指向的是定义了的create方法的DomainObject,而不是发生调用的Document。php5.3中引用了一个叫做延迟静绑定的概念,最明显的就是static关键字。static和self类似,但是区别在于前者引用的是被调用的类而不是包含类。因此,被例中,调用Document::create()会生成一个新的Document对象,而不是试图实例化一个DomainObject对象。
场景二描述:
假设我打算在DomainObject中引用组group的概念,默认情况下都属于default,但是我希望在类的继承中的分支中能够改变这个值。
代码清单
abstract class DomainObject{
private $group;
public function __construct()
{
$this->group = static::getGrount();
}
public static function create():DomainObject{
return new static();
}
public function getGrount():string
{
return "default";
}
}
class User extends DomainObject{
}
class Document extends DomainObject{
public function getGrount():string{
return "Document";
}
}
print_r(User::create());
print_r(Document::create());
浙公网安备 33010602011771号