2017-05-09 31 views
7

は、次のコードを考えてみましょう: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)();がうまくいくのと同じように、プロパティがパルテシスでラップされていればどうなりますか?だから私は3v4lでそれをテストした:

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

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

しかし、私はこのin the changelogsの一切の言及を見つけることができません。

ここで、この機能の詳細を確認できますか?

答えて

9

PHP7で実装されたNikita Popovによって、Uniform Variable Syntax RFCの一部としてIIFE(これは($this->inner)()が有効です)を使用する機能が追加されました。

これはパーサーでより良い可変構文処理の結果です。 PHP7の目的の1つが構文解析を精査することだったと考えて、私は彼らがそこでいくつかの実際の進歩を達成したと思います。