Özgün nesne kapsamında değilken ReflectionMethod kullanarak bir bağlamda çağırmak ::

1 Cevap php

Ben böyle bir şey yapmaya çalışıyorum:

class A {
   public function foo() {
      $b = new B;
      $b->invokeMethodFromAnotherObject(new ReflectionMethod($this, 'bar'));
   }
   public function bar() {

   }
}

class B {
   public function invokeMethodFromAnotherObject(ReflectionMethod $method) {
        $method->invoke(?);
   }
}

Ama yansıma yöntemi üzerinden $ this back "emmek" için hiçbir belirgin yolu, ve ben söz nesnesine bir başvuru yok. Ben B içine bu $ geçirmeden bu yapabileceği bir yolu :: invokeMethodFromAnotherObject var mı?

1 Cevap

Yansıma yöntemleri nesneler hakkında hiçbir ipucu var. Eğer "yeni ReflectionMethod" için $ this geçmek bile, elde edilen nesne yalnızca bir sınıf başvuruyu saklar. Burada ne istediğiniz geri arama aslında bir kapatma (php 5.3) ya da eski güzel array($this, 'bar') + call_user_func olduğunu.

class A {
  function foo() {
    $b = new B;
    $that = $this;
    $b->invoke(function() use($that) { $that->bar(); });
 }

 function bar() {
     echo "hi";
 }
}

class B {
 function invoke($func) {
   $func();
 }
}

$a = new A;
$a->foo();