Re: __call for existing methods?

From: Date: Fri, 21 May 2010 19:53:08 +0000
Subject: Re: __call for existing methods?
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-305408@lists.php.net to get a copy of this message
On Fri, May 21, 2010 at 2:46 PM, Maximiliano Churichi <mchurichi@gmail.com>wrote: > Is there a way to catch EVERY method of a inheritance class? > something like this... > > class Father > { > public function __call ($name, $args) > { > $this->doSomethingBefore(); > > if ( method_exists($this, $name) ) > return $this->$name($args); > else > echo 'invalid method'; > } > > public function doSomethingBefore () > { > echo 'something before called method'; > } > } > > class Son extends Father > { > public function insert () > { > echo 'inserting'; > } > } > > $johnDoe = new Son(); > > $johnDoe->insert(); > /* > -- Expected return: > something before called method > inserting > */ > > $johnDoe->foo(); > /* > -- Expected return: > something before called method > invalid method > */ > > Greetings... > > -- > Maximiliano Churichi > <mchurichi@gmail.com> > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > I played with composition as opposed to inheritance to provide hooks. The wrapper class provided the hooks for intercepting calls before and after on a delegate object. So, if I had a class like below: class Greet{ public function greet($message){ echo $message; } } To capture calls, I'd do the following: $obj = new Interceptor(new Greet()); // requires PHP 5.3 $obj->register($interceptMethod = 'greet', $interceptor = function($message){ return strtoupper($message);}, $when = Interceptor::BEFORE); $obj->greet("Hello"); // outputs "HELLO" Sorry, I didn't use inheritance in any of my work. That said, there are some php aspect oriented projects out there and perhaps their code could provide some clues as to how to get what you're looking for: http://code.google.com/p/php-aop/ http://www.aophp.net/ Adam -- Nephtali: PHP web framework that functions beautifully http://nephtaliproject.com

« previous php.general (#305408) next »