Re: __call for existing methods?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, May 21, 2010 at 2:46 PM, Maximiliano Churichi
<mchurichi@xxxxxxxxx>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@xxxxxxxxx>
>
> --
> 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

[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux