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