Welcome to Abdul Malik Ikhsan's Blog

Namespace ‘jadi-jadian’ ala PHP

Posted in Tutorial PHP by samsonasik on October 20, 2009

Namespace dapat dikatakan container yang mengelompokkan source code. Sejak lama, dalam Java telah kita kenal namespace, berupa penggunaan package di mana ketika kita mendefinisikan, misalnya, package org.postgresql , berarti class yang dipanggil berada dalam folder org/postgresql. Bagaimana dengan php ? Di php 5.3, namespace sudah mulai diperkenalkan, hanya saja, pendefinisian-nya menjadi rancu ketika kita masih tetap membutuhkan require. Lah, terus buat apa ada namespace? Tentu saja gunanya untuk pengelompokan file sehingga lebih dapi dan mudah untuk ditrace. Tentu saja kita ingin hal lain dong selain hal tersebut. Nah, untuk itu, perlu ada nya trik khusus, seperti di bawah ini.

Anggap saja kita mempunyai struktur direktori seperti di bawah ini :
namespacer Nah, yang kita perlukan adalah trik penggunaan function __autoload dalam php, yang akan mendefinisikan hal2 yg harus dilakukan ketika sebuah class diinstansiasi menjadi sebuah object.

Tentu penggunaan function __autoload ini bukan tanpa aturan. sebagai contoh, dalam file TestClass.php, saya buat sebuah class bernama org_samsonasik_TestClass , hal ini berguna untuk pemisahan folder nantinya.
source code TestClass.php :

<?php
 class org_samsonasik_TestClass{
 public function __construct($args)
 {
 echo $args ;
 }
 }

Nah, dalam file pemanggilnya, kita buat function __autoload :
sourcecode index.php

<?php

function __autoload($class)
{
 $file = str_replace("_","/",$class.".php");
 require_once $file;
}

$test = new org_samsonasik_TestClass("test");

ketika pemanggilan new org_samsonasik_TestClass, berarti telah merequire folder2 dalam package dengan akal-akalan function __autoload tersebut. Fungsi inilah yg digunakan seperti pada framework Zend.

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: