Welcome to Abdul Malik Ikhsan's Blog

PHP 5.3 : Namespace autoloading using SplClassLoader

Posted in Teknologi, Tutorial PHP by samsonasik on May 30, 2012

PHP 5.3 Salah satu fitur dari PHP 5.3 adalah namespace, atau dalam teknologi lain disebut package. Sayangnya, namespace di PHP tidaklah otomatis bisa dipanggil, maka dari itu, diperlukan sebuah loader yang disebut SplClassLoader. Class SplClassLoader bisa di-clone dari github dengan cara :

git clone git://gist.github.com/221634.git loader

Kalau sudah, kita coba buat struktur direktori seperti berikut :
Pembuatan struktur direktori namespace sebaiknya berdasarkan standard Proposing a Standards Recommendation ( PSR) dari PHP Framework Interoperability Group yang bisa dilihat di sini. Sebagai contoh, ada satu class testlib dan satu class testlib2 di folder com\mylib dan com\mylib2 yang masing2 sebagai berikut :
testlib.php

namespace com\mylib;

class testlib
{
    function __construct()
    {
        echo "test lib instantiated \n";
    }
}

testlib2.php

namespace com\mylib2;

class testlib2
{
    function __construct()
    {
        echo "test2 lib instantiated \n";
    }
}

Kalau sudah, waktunya testing deh:

require_once 'loader/SplClassLoader.php'; 
$loader = new SplClassLoader('com', __DIR__.'/vendor'); 
$loader->register();

use com\mylib\testlib,
    com\mylib2\testlib2;

$testlib = new testlib();
$testlib2 = new testlib2();

Referensi :
https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
http://stackoverflow.com/questions/9423366/php-autoloading-with-splclassloader

Foto :

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: