请考虑以下代码:
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。
我在哪里可以找到有关此功能的更多信息?
答案 0 :(得分:9)
使用IIFE(($this->inner)()
实际上是{)的能力是由Nikita Popov添加的Uniform Variable Syntax RFC的一部分,它是用PHP7实现的。
这是解析器中更好的语法处理的结果。考虑到PHP7的目标之一是彻底改进语法分析,我认为他们已经在那里取得了一些实际进展。