Membuat Framework Class dengan OOP PHP – bagian 1 Benediktus Ardian Hersanto, SE
[email protected] http://ardieb77.multiply.com http://profiles.friendster.com/ianbenedict
Lisensi Dokumen: Copyright © 2003-2007 IlmuKomputer.Com Seluruh dokumen di IlmuKomputer.Com dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari IlmuKomputer.Com.
Komunitas eLearning IlmuKomputer.Com Copyright © 2003-2007 IlmuKomputer.Com
1
Pendahuluan Anda sebagai seorang programmer PHP pasti pernah mengalami kejenuhan dalam membuat sebuah aplikasi web, kadang sebuah ritme yang monoton pasti sering anda alami dalam membuat sebuah web dinamis entah itu untuk website klien atau web untuk anda sendiri. Sebetulnya dari sebuah ritme tersebut ada beberapa hal yang dapat dibuat permanen dari struktur dasar kode program anda. Dari artikel ini diasumsikan bahwa anda sudah terlebih dahulu mempelajari Object Oriented Programming dalam PHP dan anda sudah mengetahui apa itu arti class. Pembahasan di artikel ini akan saya titik beratkan pada pembuatan framework class dari struktur objek class dasar di PHP 4 dan tidak menutup kemungkinan class tersebut masih dapat dipakai di PHP 5 atau versi terkini yaitu PHP 6, dimana di PHP 5 dan PHP 6 terdapat perbedaan yang mencolok dalam hal sekuritas dan struktur dasar class declaration. Tujuan pemrograman menggunakan class disini adalah code reuse, yang berarti kode program anda dapat di gunakan kembali untuk project-project web yang lainnya. Karena pada intinya dalam sebuah program yang berhubungan dengan database, variable yang selalu berubah-rubah adalah struktur database dan user interface. Dimana struktur database dan tampilan user interface ini selalu mengikuti alur business process dari pengguna program anda. Saat ini banyak sekali framework PHP yang ditawarkan di internet seperti Code Igniter, Cake PHP, Zend Framework, VCL Delphi PHP, Blue Shoes, dan masih banyak lagi. Tetapi dari framework yang mereka tawarkan mungkin anda dituntut untuk mengikuti alur mereka dan syntax-syntax standard mereka masing-masing. Mungkin bagi pemula yang baru mempelajari class masih kebingungan mana yang harus saya pelajari dan dalami. Anda janganlah kuatir mengenai hal itu, karena anda sebagai programmer mempunyai ciri khas masing-masing dalam memprogram, dan andapun dapat membuat framework sendiri seperti mereka, karena intinya adalah mereka masih bernaung di bawah PHP language. Mungkin ada beberapa diantara pembaca menganggap bahwa buat apa membuat sendiri dan bersusah payah karena yang instant saja sudah banyak tersedia dan pekerjaan dapat kelar tepat waktu, anda mungkin benar tapi pernahkah anda mengalami suatu kejadian dimana ada sebuah permintaan penambahan fitur dari klien/pengguna yang dimana hal itu menyebabkan anda mau tidak mau harus merubah core dari framework yang anda pakai, dan anda dituntut harus mempelajari semua dalam waktu singkat. Pasti anda kelabakan jika mengalami hal ini, beda dengan jika anda yang membuat framework itu semua, dan anda tahu betul letak-letak dimana harus merubah sebuah modul yang diminta oleh klien anda tadi. Tetapi intinya kita harus bisa mandiri dan akhirnya pilihan terakhir adalah tergantung pada anda sendiri.
Komunitas eLearning IlmuKomputer.Com Copyright © 2003-2007 IlmuKomputer.Com
2
Isi Dalam membangun sebuah aplikasi web, anda tentunya sudah pernah memetakan bagian-bagian dari sebuah website, ada login pengguna, registrasi pengguna, halaman berita, pencarian database, dsb. Dari itu semua anda dituntut harus dapat memandang sebuah website sebagai objek-objek software yang tergabung menjadi satu dan saling berhubungan objek satu dengan objek yang lainnya. Sebagai contoh, dalam Operating System Windows pasti anda sudah sangat mengenal sekali hal-hal seperti berikut ini (c:/windows/system, c:/windows/system32, c:/windows/fonts, c:/program files, registry). Itu semua adalah komponen utama windows untuk dapat menjalankan fungsinya. Begitupun juga hal itu berlaku bagi website anda, dan anda harus membuat semua komponen dasar aplikasi website anda, oops…. (ayo semangat, Jangan cepat menyerah dong…. ☺). Persiapan pertama adalah pembuatan file konfigurasi. File konfigurasi dalam hal ini adalah file konfigurasi yang menampung data-data konfigurasi sistem, seperti koneksi database, direktori web, session, dsb. Sebetulnya pembuatan file konfigurasi dapat bebas formatnya, anda dapat menggunakan variable ataupun konstanta. Sebagai contoh berikut ini adalah isi konfigurasi pada framework yang saya buat [SITE] DOMAIN_NAME = myblog.com; * SITE_TITLE = This is my website WEB_ADMIN = /admin [SYSTEM] SUB_DIR = / SYS_DIR = /lib/php4; * direktori tempat library class USE_SSL = false DOC_PATH = /home/www/mywebsite ; * root directory of your website located on the server JS_DIR = /lib/js CACHE_DIR = /cache; [LOG] ERROR_LOG = /logs/error.log PROCESS_LOG = /logs/process.log DB_ERROR_LOG = /logs/dberrors.log ; [SQL] DB_DRIVER = mysql DB_HOST = localhost DB_PORT = 3306 DB_NAME = test DB_USER = root; * Username to connect to MySQL server DB_PASS = test; * Password DB_PREFIX = sys ; * if you use spesific name on your tables define it here [SESSION] STORAGE_TYPE = SESS_FILES; (PHP_DEFAULT, SESS_FILES, SESS_DB) 3 types session model USE_PHP_DEFAULT_HANDLER = true; SESS_TMP_DIR = /session_data ; SESS_NAME = SESSID ; COOKIE_PATH = / ; * COOKIE_LIFETIME = 60; valid for n minutes * COOKIE_DOMAIN = ; example : .domain.com is set for entire sub domain * COOKIE_SECURE = 0; use only for SSL Connection *
Format file konfigurasi seperti yang terlisting diatas memakai format seperti INI file pada windows. Untuk memparsing file konfigurasi ini dapat memakai perintah PHP parse_ini_file atau kita dapat memparsing sendiri dengan menggunakan Regular Expression. Daftar konfigurasi diatas dibagi-bagi ke dalam sub section seperti halnya INI file pada windows. Sub section yang terlisting diatas ditaruh dalam satu file bernama
Komunitas eLearning IlmuKomputer.Com Copyright © 2003-2007 IlmuKomputer.Com
3
config.ini.php (harap ditambahkan ekstensi .php agar file konfigurasi tidak dapat didownload), per sub section merupakan kumpulan konstanta yang digunakan oleh class-class objek dalam framework. Hal berikut yang harus kita persiapkan adalah membuat library untuk framework kita, fungsi yang paling mendasar dari web dinamis adalah fungsi koneksi ke database. Anda mungkin pada waktu memprogram dengan PHP selalu berpedoman pada PHP manual, dan database yang anda gunakan akan sangat bervariasi tergantung dari kebutuhan user, jika framework yang akan anda buat ingin dapat mensupport semua jenis database server maka anda harus membuat dahulu skema class abstract yang berfungsi untuk perantara masing-masing database server. Dalam artikel ini saya menyajikan database mysql sebagai contoh karena secara default di PHP 4 sudah tersedia fungsi-fungsi mysql tersebut, di PHP 5 fungsi mysql harus disertakan dengan meng-enable ekstensi php_mysql.dll (Windows) atau php_mysql.so (Linux) pada setting php.ini. Dari fungsi bawaan php ini kita dapat merangkum fungsi-fungsi database tersebut ke dalam satu kesatuan objek. Sebelum kita mulai membuat class mysql ada baiknya kita simak abstract class rdbms berikut ini yang berisi perintah-perintah dasar dalam konteks fungsinya sebagai Objek database. class rdbms { var $dbname; var $dbhost; var $dbusername; var $dbpassword; var $dbport; function __create(){ // user defined constructor class // konstanta diambil dari hasil parsing file konfigurasi if(defined('DB_HOST')) $this->dbhost = DB_HOST; if(defined('DB_USER')) $this->dbusername = DB_USER; if(defined('DB_PASS')) $this->dbpassword = DB_PASS; if(defined('DB_NAME')) $this->dbname = DB_NAME; if(defined('DB_PORT')) $this->dbport = DB_PORT; } function Connect(){} function TestConnection($dbname,$dbhost,$dbuser,$dbpassword){} function Select($fields,$table,$exp='',$page='',$limit='',$urlquery=''){} function Insert($table,$fields,$values){} function Update($table,$value,$exp=''){} function Delete($table,$exp=''){} function Query($command,$return_result=0){} function TableExists($tablename) {} function DropTable($tablename) {} function Disconnect() {} }
Abstract class diatas adalah daftar fungsi-fungsi yang sering kita lakukan pada saat berhubungan dengan database. Arti dari abstract class disini adalah sebuah class yang memiliki daftar procedure / fungsi tetapi belum di implementasikan (belum berisi kode), dan metode ini memiliki perintah koneksi yang berbeda-beda tergantung dari database server yang dipakai, dan hal ini diimplementasikan pada class turunannya. Dari struktur class abstract diatas kita dapat mengimplementasikannya ke dalam database mysql server. Berikut ini adalah class mysql yang diturunkan dari class abstract rdbms.
Komunitas eLearning IlmuKomputer.Com Copyright © 2003-2007 IlmuKomputer.Com
4
class mysql extends rdbms { function mysql() { parent::__create(); // panggil constructor parent class (rdbms) if($this->Connect()) { if(!defined("__MYSQL")) define(”__MYSQL”, 1); } else { die(‘koneksi ke database mysql gagal’); } } function Connect() { if($this->dbport != '3306') $this->dbhost .= ':' . $this->dbport; $this->db = @mysql_connect($this->dbhost,$this->dbusername,$this->dbpassword); if($this->db) { if(@mysql_select_db($this->dbname)) { $this->connected = true; return true; } else return false; } else { return false; } } } …. dst }
Harap diperhatikan di fungsi bernama mysql diatas di php 4 akan dianggap sebagai class constructor, jangan bingung dengan class constructor __create di parent classnya (rdbms). Karena di php 4 pada saat menginisiasi objek, metode constructor asal dari parent class tidak dieksekusi secara otomatis. Perhatikan juga fungsi Connect diatas, kita dapat melihat implementasi penurunan class berdasarkan jenis database server. Dari abstract class rdbms anda dapat menurunkan ke database Firebird, postgreSQL, MsSQL server, dll, dengan tidak kuatir merubah fungsionalitas dasar yang di deklarasikan di rdbms. Jadi disini perintah SQL anda akan tetap sama meskipun database server yang anda pakai diganti dengan database server yang lainnya selama struktur field database anda masih sama dan database server sama-sama mensupport SQL command standard. Apabila ada fitur spesifik khusus untuk database server tertentu anda hanya tinggal menambahkan fungsi di dalam class turunannya. Jika anda masih bingung mengenai penurunan (inheritance), contoh berikut ini adalah versi gampangnya. class one { function one() { echo 'This is One'; } } class two extends one { function two() { echo 'This is Two'; } } $t = new two; // seharusnya output menghasilkan This is One This is Two // tetapi output hanya menghasilkan This is Two
Komunitas eLearning IlmuKomputer.Com Copyright © 2003-2007 IlmuKomputer.Com
5
Topologi object oriented seperti itu akan anda jumpai jika anda pernah memprogram dalam bahasa C++ atau Delphi. Sehingga pendeklarasian class anak harus menyertakan metode constructor parent classnya sebagai berikut class one { function one() { echo 'This is One'; } } class two extends one { function two() { parent::one(); echo 'This is Two'; } } $t = new two; // output menghasilkan This is One This is Two
Sampai disini anda diharapkan dapat mengembangkan class turunan dari masing-masing database server. Atau anda dapat langsung mempelajari class database ini langsung dari framework yang saya buat (terlampir). Diharapkan nantinya framework class yang kita buat akan dapat mengcover fasilitas upload, session, user account, import-export database, web service, dll. Pada tahap ini jika framework class database telah selesai maka class framework yang akan kita bahas selanjutnya adalah session (nantikan pada bagian 2). Terima Kasih.
Penutup Tidak ada gading yang tak retak, apabila anda masih belum mengerti mengenai penjelasan saya, anda dapat bertanya melalui email. Tetapi tidak ada sesuatu yang dapat dikuasai tanpa memerlukan proses pembelajaran (learning by doing), ketekunan dan kesabaran. Anda pasti bisa karena anda adalah manusia juga seperti saya, dan semuanya memerlukan suatu proses yang disebut dengan waktu. Ingatlah bahwa hidup tidak hanya didepan komputer, tetapi hidup tidak akan bervariasi tanpa pengetahuan. Selamat belajar.
Referensi http://www.google.com
Komunitas eLearning IlmuKomputer.Com Copyright © 2003-2007 IlmuKomputer.Com
6
Biografi Penulis
Benediktus Ardian Hersanto, SE. Adalah lulusan S1 Manajemen Keuangan STIE Perbanas Surabaya angkatan 1995. Berkecimpung dalam dunia IT sejak tahun 1999, tetapi sebelumnya sempat belajar elektronika digital di IEI (surabaya) pada tahun 1997-1998. Di dunia IT sendiri penulis belajar secara otodidak dari internet. Pernah bekerja sebagai Web Designer, Server Administrator, System Programmer, dan pernah mendirikan perusahaan IT pada tahun 2002 - 2005. Saat ini penulis bekerja di salah satu perusahaan IT di Jakarta sebagai R & D.
Benediktus Ardian Hersanto, SE URL : http://ardieb77.multiply.com URL : http://profiles.friendster.com/ianbenedict Email & YM :
[email protected]
Komunitas eLearning IlmuKomputer.Com Copyright © 2003-2007 IlmuKomputer.Com
7