2017-07-11 4 views
1

Ich versuche, die Instanz der Klasse zuzugreifen, in dem es ein anonymes, wie wir in Java, zum Beispiel tun enthält:Wie kann man von einem Anonymous in PHP 7 auf die Instanz der Hauptklasse zugreifen?

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 ???? 
      } 

     }; 
    } 
} 

I Wie kann Zugriff auf die MyClass-Instanz von innerhalb des anonymen?

+0

Sie so etwas wie Eltern bedeuten :: prop http : //php.net/manual/pl/keyword.parent.php –

+0

Sie müssen es als StdClass beziehen, dann vielleicht Reflection? Sie mischen Java-Logik mit PHP-Logik - das funktioniert nicht, weil der Bereich nicht erreicht. Es sei denn, Sie machen die Eigenschaft statisch: Sie kann mit 'ClassName :: $ property' aufgerufen werden, muss aber öffentlich sein. – KDOT

+1

@BenYitzhaki Parent :: $ Prop funktioniert nicht in PHP 7 Anon Klassen – Mystic

Antwort

3

verwenden:

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(); 

Der Schlüssel ist $this als Konstruktor-Parameter der anonymen Klasse zu injizieren.

Anmerkung: Ich habe mich verändert Ihre private $prop-public so würde ich nicht einen Getter für sie schreiben müssen;)

Sehen Sie, wenn Sie hier: https://3v4l.org/IRhXd

+0

Leider hat PHP versucht, Java und andere zu kopieren, aber es ist immer noch ein Baby, das die ersten Schritte macht, vielen Dank! – Mystic

+0

Gerne helfen! Und keine Sorge, PHP wird erwachsen ... irgendwann;) –

+0

@Mystic PHP ist eine schwächere typisierte Sprache, wenn Sie Java-Logik verwenden möchten, aber bei einer PHP-Syntax bleiben, dann schlage ich vor, Sie schauen auf Facebooks Sprache, Hack . – KDOT

Verwandte Themen