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.. Редактировать эхо "$ число"; отображать цифры $; как ваш пустой массив в массиве цикла