Archive for the 'PHP' Category

PHP, Enterprise Application dan Namespace/Package

PHP merupakan bahasa pemrograman yang memulai memanjat sebagai bahasa yang bisa digunakan untuk membuat Enterprise Application. Mulai PHP5 (PHP versi 5) konsep Object Oriented Programming telah ditingkatkan cukup banyak. Benarkah PHP siap menjadi Enterprise Language? Saya tidak menjawab ya atau tidak, tetapi keberadaan application framework semacam Zend Framework dan Prodo Framework paling tidak telah dipersiapkan untuk menjawab tantangan itu.

Tetapi ada sebuah hal yang cukup menggangu bagi pengembang dalam menggunakan PHP untuk membangun Enterprise Application, yaitu namespace. Sebuah Enterprice Application akan membutuhkan banyak kode sehingga membutuhkan pengorganisasian kode yang baik. Aplikasi akan terdiri dari banyak class, dimana class-class ini perlu dikelompokkan menjadi beberapa package. Sangat mungkin sebuah package berasal dari pihak ke tiga. Nah fungsi namespace adalah untuk mengidentifikasikan packege-packege supaya tidak terjadi benturan nama class yang disebabkan struktur aplikasi yang skala besar. (Untuk memahami konsep Namespace lebih lanjut, Anda dapat membaca bukunya Robert C. Martin, ‘Agile Software Development. Principles, Patterns, and Practice’ yang diterbitkan Prentice Hall, 2003.)

Dalam Java, namespace identik dengan package dan menggunakan keyword ‘package’ untuk mendefinisikannya. Sedangkan C# (.Net) menggunakan keyword dengan nama yang sama, yaitu ‘namespace’.

Contoh kasus manfaat namespace dalam java dapat ditemui package java.sql dan java.util. Kedua package tersebut sama-sama memiliki class Date. Jika Anda hanya menggunakan salah satu package saja, maka Anda dapat membuat object Date sebagai berikut:

Date now = new Date();

Tetapi jika kedua package tersebut Anda gunakan bersama-sama, maka kode di atas akan mengalami error karena ada dua (2) class yang bernama sama. Nah disinilah manfaat namespace, sehingga Anda dapat membuat object Date dari package java.util sebagai berikut:

java.util.Date now = new java.util.Date();

Nah bagaimana jika Anda menggunakan PHP, kemudian menggunakan dua buah package library yang mempunyai nama class yang sama? Konon PHP6 akan mempunyai fitur namespace, tapi kita belum bisa berharap banyak karena belum tahu kapan versi stabil nya keluar. Solusi yang disarankan adalah dengan melakukan perubahan tata-cara penamaan class. Kita dapat menamakan sebuah class seperti memberi nama namespace, sebagai berikut:

1. Nama class diawali dengan nama perusahaan pembuat
2. Setelah nama perusahaan dilanjutkan nama paket (package).
3. Jika ada sub-package, dilanjutkan dengan memberi nama sub-package
4. Terakhir adalah nama class sebenarnya (jika tidak diberi awalan namespace).
5. Antara nama perusahaan, package, sub-package dan ‘original class name’ dipisah dengan karakter “_” menggantikan karakter “.” yang lazim dipakai dalam menamakan namespace.

Contoh yang baik telah diterapkan pada Zend Framework. Zend memberi nama class untuk Lucene dalam package Search dengan Zend_Search_Lucene. Berikut petikan kodenya:

/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to version 1.0 of the Zend Framework
* license, that is bundled with this package in the file LICENSE, and
* is available through the world-wide-web at the following URL:
* http://www.zend.com/license/framework/1_0.txt. If you did not receive
* a copy of the Zend Framework license and are unable to obtain it
* through the world-wide-web, please send a note to license@zend.com
* so we can mail you a copy immediately.
*
* @package Zend_Search_Lucene
* @copyright Copyright (c) 2005-2006 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://www.zend.com/license/framework/1_0.txt Zend Framework License version 1.0
*/

/** Zend_Search_Lucene_Exception */
require_once ‘Zend/Search/Lucene/Exception.php’;

/** Zend_Search_Lucene_Document */
require_once ‘Zend/Search/Lucene/Document.php’;

/** Zend_Search_Lucene_Storage_Directory */
require_once ‘Zend/Search/Lucene/Storage/Directory/Filesystem.php’;

/** Zend_Search_Lucene_Index_Term */
require_once ‘Zend/Search/Lucene/Index/Term.php’;

/** Zend_Search_Lucene_Index_TermInfo */
require_once ‘Zend/Search/Lucene/Index/TermInfo.php’;

/** Zend_Search_Lucene_Index_SegmentInfo */
require_once ‘Zend/Search/Lucene/Index/SegmentInfo.php’;

/** Zend_Search_Lucene_Index_FieldInfo */
require_once ‘Zend/Search/Lucene/Index/FieldInfo.php’;

/** Zend_Search_Lucene_Index_Writer */
require_once ‘Zend/Search/Lucene/Index/Writer.php’;

/** Zend_Search_Lucene_Search_QueryParser */
require_once ‘Zend/Search/Lucene/Search/QueryParser.php’;

/** Zend_Search_Lucene_Search_QueryHit */
require_once ‘Zend/Search/Lucene/Search/QueryHit.php’;

/** Zend_Search_Lucene_Search_Similarity */
require_once ‘Zend/Search/Lucene/Search/Similarity.php’;

class Zend_Search_Lucene
{



}

?>

Nah apakah Anda sudah siap dengan PHP Enterprise?

Jabat erat selalu,

Agus Suhartono