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
Dosen sind silbern