Как объединить метод в цепочку на недавно созданном объекте?

Я хотел бы знать, существует ли способ объединить методы в цепочку на недавно созданном объекте в PHP?

Что-то как:

class Foo {
    public function xyz() { ... return $this; }
}

$my_foo = new Foo()->xyz();

Кто-либо знает о способе достигнуть этого?

55
задан user2864740 19 June 2014 в 00:00
поделиться

1 ответ

В 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 в статический метод, вы можете создать экземпляр класса с помощью вызова метода, и тогда вы можете связать его.

99
ответ дан 26 November 2019 в 17:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: