基於PHP版本: 5.3.5php
PHP5.3 之後引入了延遲靜態綁定:spa
static(關鍵字) 相似於 self(關鍵字) , 但它指向的是被調用的類(Document) 而不是包含類(DomainObject) , static 和 self 的區別:code
Code:io
<?php class DomainObject{ public static function createStatic(){ return new static(); } public static function createSelf(){ return new self(); } } class User extends DomainObject{ } class Document extends DomainObject{ } echo '<pre>'; var_dump( Document::createStatic()); var_dump( Document::createSelf());Result:
object(Document)[1] object(DomainObject)[1]
之前你這麼寫:function
abstract class DomainObject{ } class User extends DomainObject{ public static function create(){ return new User(); } } class Document extends DomainObject{ public static function create(){ return new Document(); } }
如今, 你能夠這麼寫: class
abstract class DomainObject{ public static function create(){ return new static(); } } class User extends DomainObject{ } class Document extends DomainObject{ }
好處: 能夠節省大量重複代碼~object