2017-07-11 2 views
1

私たちはJavaなど、でそうであるように、それは匿名を含むクラスのインスタンスにアクセスしようとしている:PHP 7の匿名クラスからメインクラスのインスタンスにアクセスするには?

JAVA

class MyClass 
{ 
    private String prop = "test"; 

    public void test() 
    { 
     new Runnable() { 

      public void run() 
      { 
       // I can access MyClass.this from here 
       System.out.println(MyClass.this.prop); 
      } 

     }.run(); 
    } 
} 

PHP 7

<?php 

class MyClass 
{ 
    private $prop = "test"; 

    public function test() 
    { 
     $class = new class{ 

      public function run() 
      { 
       // ???? MyClass::$prop ???? 
      } 

     }; 
    } 
} 

どのようにすることができます匿名でMyClassインスタンスにアクセスできますか?この

+0

あなたが親のような何かを意味::支えるHTTP ://php.net/manual/pl/keyword.parent.php –

+0

これをStdClassとして参照し、Reflectionを使用する必要がありますか? JavaロジックとPHPロジックを混在させています。スコープが届かないため動作しません。プロパティを静的にしない限り、 'ClassName :: $ property'を使用して呼び出すことができますが、publicである必要があります。 – KDOT

+1

@BenYitzhaki親::そのコードは、これは[匿名クラスのドキュメント](http://php.net/manual/en/languageに実際にあるPHP 7 – Mystic

答えて

3

用途:

class MyClass 
{ 
    public $prop = "test"; 

    public function test() 
    { 
     $class = new class($this){ 
      private $parentObj; 
      public function __construct($parentObj) 
      { 
       $this->parentObj = $parentObj; 
      } 
      public function run() 
      { 
       echo $this->parentObj->prop; 
      } 
     }; 
     $class->run(); 
    } 
} 

$x = new MyClass(); 
$x->test(); 

キーは匿名クラスのコンストラクタのパラメータとして$this注入することです。

注:私はので、私はそれのためにゲッターを記述する必要はないpublicにごprivate $propを変更しました;)

場合こちらを参照してください:?https://3v4l.org/IRhXd

+0

残念ながら、PHPはJavaなどをコピーしようとしていますが、まだ最初のステップを踏んでいる赤ちゃんです。ありがとうございます! – Mystic

+0

お手伝いします!そして、心配しないで、PHPはいつか成長するだろう...) –

+0

@ミスティックPHPはJavaロジックを使いたいが、PHP構文を守りたいなら、Facebookの言語、ハック。 – KDOT

関連する問題