PHP:链接' __调用' $ this'导致解析错误

时间:2014-03-27 05:33:29

标签: php function parsing invoke magic-methods

我正在运行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 个答案:

答案 0 :(得分:-1)

1 ..删除var,因为php变量使用$,例如$ numbers =“”;

2 ..只使用一个下划线作为调用名称,如__invoke。

3 ..编辑echo“$ number,”;回应$数字;作为循环数组中的空数组