Я хотел бы знать, существует ли способ объединить методы в цепочку на недавно созданном объекте в PHP?
Что-то как:
class Foo {
public function xyz() { ... return $this; }
}
$my_foo = new Foo()->xyz();
Кто-либо знает о способе достигнуть этого?
В PHP 5.4+ синтаксический анализатор был изменен, поэтому вы можете сделать что-то вроде этого
(new Foo())->xyz();
Заключите экземпляр в круглые скобки и прочтите цепочку.
До PHP 5.4 при использовании синтаксиса
new Classname();
нельзя было связать вызов метода с экземпляром. Это ограничение синтаксиса PHP 5.3. После того, как объект создан, вы можете отказаться от него.
Один из методов, который я видел, чтобы обойти это, - это какой-то статический метод создания экземпляров.
class Foo
{
public function xyz()
{
echo "Called","\n";
return $this;
}
static public function instantiate()
{
return new self();
}
}
$a = Foo::instantiate()->xyz();
Обернув вызов new в статический метод, вы можете создать экземпляр класса с помощью вызова метода, и тогда вы можете связать его.