Adsense

Autoload your classes in PHP


Many developers writing object-oriented applications create one PHP source file per-class definition. One of the biggest annoyances is having to write a long list of needed includes at the beginning of each script (one for each class).
In PHP 5, this is no longer necessary. You may define an __autoload function which is automatically called in case you are trying to use a class/interface which hasn’t been defined yet.
This is how it works in action. We will create two classes. So create Image.php file and paste this in:
1<?php
2  class Image {
3 
4      function __construct() {
5          echo 'Class Image loaded successfully <br />';
6      }
7 
8  }
9?>
Now create Test.php file and paste this in:
1<?php
2  class Test {
3 
4      function __construct() {
5          echo 'Class Test working <br />';
6      }
7 
8  }
9?>
Basically, we created 2 simple classes with constructors which echo some text out. Now, create a file index.php and paste this in:
1<?php
2  function __autoload($class_name) {
3      require_once $class_name '.php';
4  }
5 
6  $a new Test();
7  $b new Image();
8?>
When you run index.php in browser, everything is working fine (assuming all 3 files are in the same folder). Maybe you don’t see a point, but imagine that you have 10 or more classes and have to write require_once as many times.
I will show you how to properly throw exception if you are using PHP 5.3 and above. Chane your index.php to look like this:
01<?php
02function __autoload($class_name) {
03    if(file_exists($class_name '.php')) {
04        require_once($class_name '.php');
05    else {
06        throw new Exception("Unable to load $class_name.");
07    }
08}
09 
10try {
11    $a new Test();
12    $b new Image();
13} catch (Exception $e) {
14    echo $e->getMessage(), "\n";
15}
16?>
Now, it checks if file exists and throws a proper Exception if it doesn’t.

No comments:

Post a Comment

comment here

newest questions on wordpress