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

Ada*_*ney 7 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';
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

return ($this->inner)() . ' world';
Run Code Online (Sandbox Code Playgroud)

并发现它适用于PHP 7,但不适用于以前的版本.

但是,我在更改日志中找不到任何提及.

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

Nie*_*sol 9

使用IIFE(($this->inner)()实际上是)的能力是作为Nikita Popov 的统一变量语法RFC的一部分添加的,它是在PHP7中实现的.

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