Создание объекта
abstract class DomainObject{ public static function create(){ return new self(); } } class Document extends DomainObject(); Document::create();
static позволяет обратиться к вызываемому классу а не текущему как self
abstract class DomainObject{ public static function create(){ return new static(); } } class Document extends DomainObject(); Document::create();
Идентификатор для вызова статических методов
abstract class DomainObject{ private $_group; public function __construct(){ $this->_group = self::getGroup(); } public static function create(){ return new static(); } static function getGroup(){ return "default"; } public function Group(){ return $this->_group; } } class User extends DomainObject{} class Document extends DomainObject{ static function getGroup(){ return "document"; } } echo User::create()->Group(); // return default echo Document::create()->Group(); // return default
static позволяет обратиться к вызываемому классу а не текущему как self
abstract class DomainObject{ private $_group; public function __construct(){ $this->_group = static::getGroup(); } public static function create(){ return new static(); } static function getGroup(){ return "default"; } public function Group(){ return $this->_group; } } class User extends DomainObject{} class Document extends DomainObject{ static function getGroup(){ return "document"; } } echo User::create()->Group(); // return default echo Document::create()->Group(); // return document