Domain Names for sale

PHP Magic Functions: Best Part of Object Oriented PHP – Part 1


There are some reserved function names  in PHP class starting with __ ( double underscore ). These are __construct, __destruct, __isset, __unset, __call, __callStatic, __sleep, __wakeup, __get, __set, __toString, __set_state, __invoke and __clone. You cannot use these functions to serve your logical purpose but these are meant to be used for providing magic functionality.

Lets start with the most familiar ones …

__construct and __descruct : Play with birth ( initialization ) and death ( destroy ) of an object

These methods are better known as constructor ( called when object is initialized ) and destructor ( called when object is destroyed or scope of an object vanishes ), well known keywords in Object Oriented Programming. Most of you guys are already familiar with these functions therefore I am not going to discuss them in detail.

__call and __callStatic : Don’t leave any undefined function in your class

There are two ways of calling a class function. First one is with Object Scope and second one is with Static Scope. In former case an object of the class is first instantiated and then a function is called using the -> ( I’m missing its name, any suggestion !!! ) operator while in latter case the function is called using the Scope Resolution Operator( :: ) with class name.

Whenever you try to access a function of your class with object scope which is not defined it throws an error. e. g.

1
2
3
4
5
6
7
<?php
  class myClass() {
    private $a = true;
  }
 
  $myObj = new myClass();
  $myObj->showValue();

This will throw an error on execution:

Fatal error: Call to undefined method myClass::showValue() in <path-to-your-file>.php on line 11

To avoid this you can use magic function __call, this function is called whenever an undefined function of a class is called with object scope. Lets have a look

1
2
3
4
5
6
7
8
9
10
<?php
  class Greetings {
    function __call( $functionName, $argumentsArray ) {
      echo "Hello, " . ucfirst( $functionName ) . " !!!";
    }
  }
  $sayHello = new Greetings();
  $sayHello->steve();
  $sayHello->adams();
  $sayHello->dexter();

The output of the above code will be :

1
2
3
Hello Steve !!!
Hello Adams !!!
Hello Dexter !!!

Now think what will happen, if we call an undefined function with static scope, this will again throw an error on execution. To handle call to undefined static functions the __callStatic magic function is used.

1
2
3
4
5
6
7
8
9
10
<?php
  class Greetings {
    static function __callStatic( $functionName, $argumentsArray ) {
      echo "Hello, " . ucfirst( $functionName ) . " !!!";
    }
  }
 
  Greetings::steve();
  Greetings::adams();
  Greetings::dexter();

The output of the above code will be same as it was for the former code :

1
2
3
Hello Steve !!!
Hello Adams !!!
Hello Dexter !!!

For rest of the magic functions keep visiting my blog and don’t forget to leave feedback about the the post.

Happy coding and keep it as simple as possible.

email