为什么在PHP 7中调用可调用属性有效?

时间:2017-05-09 14:29:37

标签: php php-7

请考虑以下代码:

interface Doll
{
    /**
     * @return string
     */
    function __invoke();
}

class LargeDoll
{
    private $inner;

    function __construct(Doll $inner)
    {
        $this->inner = $inner;
    }

    function __invoke()
    {
        return $this->inner() . ' world';
    }
}

这不起作用,因为它期望$this->inner是一个方法,而不是一个可调用的属性。

然后它发生在我身上,就像(new LargeDoll)();会起作用一样,如果财产也包裹在paranthesis中呢?所以我在3v4l上测试了它:

return ($this->inner)() . ' world';

And found that it works for PHP 7, but not for previous versions.

但是,我找不到这个in the changelogs

我在哪里可以找到有关此功能的更多信息?

1 个答案:

答案 0 :(得分:9)

使用IIFE(($this->inner)()实际上是{)的能力是由Nikita Popov添加的Uniform Variable Syntax RFC的一部分,它是用PHP7实现的。

这是解析器中更好的语法处理的结果。考虑到PHP7的目标之一是彻底改进语法分析,我认为他们已经在那里取得了一些实际进展。