Skip to content


Interceptor Methods: __call() (Php Overloading)

Php provides  built-in interceptor methods.This also known as overloading but since that term means something quite different in Java and C++. PHP5  supports three built-in interceptor methods.Like __construct(), these are invoked for you when the right conditions are met.

Below  the tables describes this methods.

Method Description
__get($property) Invoked when an undefined property is accessed
__set($property) Invoked when a value is assigned to an undefined property
__isset($property) Invoked when isset() is called on an undefined property
__unset($property) Invoked when unset() is called on an undefined property
__call($method, $arg_array) Invoked when an undefined method is called

(PHP Objects, Patterns, and Practice  Book - Matt Zandstra - Apress.  Page 60.)

We  touch on __call() method for now. And i added an example how we can implement it.


/*
*  An Interceptor Example for __call() method
*  Ersin Güvenç.
*/

Class NameWriter
{
    /*
    *  @param - 1: name  - instance of Name Class
    */
    function writeName(Name $name)
    {
        print $name->getName();
    }

    function writeAge(Name $name)
    {
        print $name->getAge();
    }

}  //end of the class.

Class Name
{
    private $writer; //NameWriter instance

    function __construct(NameWriter $writer)
    {
        $this->writer = $writer;
    }

    /* our __call method */
    function __call($methodname, $args)
    {
        if(method_exists($this->writer, $methodname))
        {
            return $this->writer->$methodname($this);
        }
    }

    function getName() { return "John"; }
    function getAge() { return "27";}

} //end of the class.

//Our Super Object.
$name = new Name( new NameWriter() );

$name->writeName();
$name->writeAge();

//OUTPUT
//Jonn
//27

When the client makes this call to Name

$name = new Name( new NameWriter() );
$name->writeName();

the call method is invoked.We find a method called writeName() in our NameWriter object and invoke it.This saves us from manually invoking the delegated method like this:

function writeName {
     $this->writeName( $this );
}
  • Facebook
  • Digg
  • Delicious
  • Google Bookmarks
  • Technorati Favorites
  • Yahoo Bookmarks
  • Webnews
  • Technotizie
  • Taggly
  • Linkatopia
  • Ping
  • StumbleUpon
  • Twitter
  • Share/Bookmark

Posted in php articles.

Tagged with , , , .


0 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.



Some HTML is OK

or, reply to this post via trackback.



Easy AdSense by Unreal