PHP: цепочка '__invoke's'$this'вызывает ошибку синтаксического анализа

Я использую PHP 5.5.9 и получаю ошибку разбора, которую я не знаю, как ее решить. Вот чрезвычайно надуманный пример техники, которую я пытаюсь использовать:

<?php

class NumberDisplayer {
    var $numbers = [];

    function __invoke($n) {
        array_push($this->numbers, $n);
        return $this;
    }

    function display() {
        foreach ($this->numbers as $number) {
            echo "$number, ";
        }
    }
}

((new NumberDisplayer())
        (5)
        (10)
        (14)
        (20)
        (11)
        ->display());

?>

Это дает:-

Parse error: syntax error, unexpected '(' in <documents>/index.php on line 18

Такой бессмысленный пример, очевидно, может быть решен с помощью лучших средств, но мой вопрос заключается в том, как заставить эту технику работать в ситуациях, когда она хорошо подходит.

Мои рассуждения таковы: new NumberEchoer() оценивает экземпляр NumberEchoer, который сам по себе __invoke, Из-за этого я должен иметь возможность вызывать выражение, которое само возвращает $ this, которое также можно вызвать, и так далее, и так далее. В конце выражения я призываю display метод, который делает отображение.

Я также пытался упаковать все выражение в одну строку, но удаление новых строк ничего не исправило.

Кажется, я могу хранить NumberDisplayer в переменную и вызывать переменную вручную в каждой строке, но это делает код гораздо менее читабельным.

Как сделать эту идиому сцепления магических методов читабельным способом?

1 ответ

1.. Удалите переменную, потому что переменные php используют $, пример $ numbers = "";

2. Используйте только одно подчеркивание для имени вызова, например __invoke.

3.. Редактировать эхо "$ число"; отображать цифры $; как ваш пустой массив в массиве цикла

Другие вопросы по тегам