Ну, это может быть старый вопрос, но, как и во многих других вещах в программировании, в конце концов ответ меняется.
Что касается PHP 5.3, нет, вы не можете напрямую связываться с конструктором. Однако, чтобы расширить принятый ответ, чтобы должным образом приспособиться к наследованию, вы можете сделать:
abstract class Foo
{
public static function create()
{
return new static;
}
}
class Bar extends Foo
{
public function chain1()
{
return $this;
}
public function chain2()
{
return $this;
}
}
$bar = Bar::create()->chain1()->chain2();
Это будет отлично работать и вернет вам новый экземпляр Bar ().
В PHP 5.4, однако, вы можете просто сделать:
$bar = (new Bar)->chain1()->chain2();
Надеюсь, это поможет кому-то наткнуться на вопрос, как у меня!