PHP - Особенности
Позднее статическое связывание >= v 5.3
new static()
Создание объекта
Неверно
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();
static::someStaticFunction()
Идентификатор для вызова статических методов
Неверно
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