PHP - Особенности

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