Rolf b: Nutzen der Interzeptermethoden im Framework

Beitrag lesen

Hallo dedlfix,

du kannst die __call Methode nicht als generischen Method Interceptor nutzen, wie es Dir zum Beispiel in C# eine DI-Library wie Unity liefert. Grund ist, dass __call nur gerufen wird, wenn eine unbekannte Methode angesprochen wird.

Du musst das dann schon explizit vorsehen, also so:

class Dings {
   function __call($name, $args) {
      Logger::LogCall("Dings", $name, "Enter method");

      call_user_func_array([$this, "_".$name], $args);

      Logger::LogCall("Dings", $name, "Exit method");
   }

   private function _foo($a, $b)
   {
      return $a + $b;
   }
}

$d = new Dings();
$d->foo(3,4);     // Ruft via __call die _foo Methode auf

Damit bremst Du PHP allerdings gründlich aus, das darf man nicht mit der Gießkanne machen. Es sei denn, in PHP 7 haben die Kollegen um RL gewaltig optimiert.

Einen echten Interceptor wollte mal jemand bauen, das scheint aber stecken geblieben zu sein.

Rolf

--
Dosen sind silbern