Ananfauzi's Blog

May 15, 2013

Pemograman Berorientasi Objek dengan PHP (Part 4)

Filed under: Pemograman PHP — Tags: , , — ananfauzi @ 1:36 pm

Yosh.., sekarang kita kembali lagi mencoba mempelajari object oriented programming dengan menggunakan PHP. Tidak terasa, pembahasan kita sudah mencapai chapter ke 4. Dari chapter 1, 2, dan 3 kita sudah mempelajari banyak hal mendasar pengimplementasian OOP didalam PHP. Mulai dari class, objek, encapsulation, inheritance, dan sedikit polymorphism. Mungkin masih banyak hal yang terlewat, mudah-mudahan bisa terbahas pada pembahasan-pembahasan selanjutnya. Perjalanan kita masih panjang… πŸ˜€

Pada chapter sebelumnya kita sudah mencoba pengimplementasian beberapa konsep OOP, dengan mengetikkan beberapa kode PHP disertai beberapa penjelasan yang panjang x lebar x tinggi. Pada chapter ke 4 ini kita akan rehat sejenak. Sejenak melupakan penjelasan dan teori-teori yang jelimet.
Pada chapter ini kita akan coba membuat aplikasi sederhana, memanfaatkan konsep yang telah kita dapatkan pada pembahasan-pembahasan sebelumnya. Harapannya sih.., kita bisa melihat The True Power of Object Oriented. Mudah-mudahan bisa tercapai, karena yang menulis pun masih sama-sama belajar.

Ceritanya, kita akan membuat sebuah form yang akan menerima sejumlah inputan dari user. Data-data yang diinputkan tersebut, kemudian akan kita tampilkan dalam bentuk tabel-tabel HTML.
Berikut ini adalah contoh form html yang diketikkan langsung.

<html>
<head>
<title>Membuat Form Sederhana</title>
</head>
<body>
<?php 
$bulan = array("Januari","Febuari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember");
?>
<form id="frm_data" method="post" action="proses_data.php">
<fieldset>
<legend><h2>Form Pengiriman Data</h2></legend>
<p><label>Nama Anda :</label><input type="text" name="txtNama" id="txtNama" size="15" maxlength="30" /></p>
<p><label>Jenis Kelamin :</label>
<input type="radio" name="gender" id="gender" value="pria" /> Laki-Laki
<input type="radio" name="gender" id="gender" value="wanita" /> Perempuan
</p>
<p><label>Bulan Lahir</label>
<select name="select_bulan_lahir">
<option value="">Pilih Bulan</option>
<?php
for($i=0;$i<count($bulan);$i++){
?>
<option value="<?php echo $i+1;?>"><?php echo $bulan[$i]; ?></option>
<?php
}
?>
</select>
</p>
<p><label>Deskripsi diri anda : </label><textarea name="deskripsi" id="deskripsi" rows="5" cols="10"></textarea></p>
<p><label>Saya setuju dengan ketentuan yang ditetapkan :</label><input type="checkbox" name="chk_ketentuan" value="ketentuan" /></p>
<p><input type="submit" name="submit" value="submit" /></p>
</fieldset>
</form>
</body>
</html>

Sekarang kita akan mencoba membuat form, dan menampilkan hasilnya dalam bentuk tabel HTML dengan gaya OOP

  1. Pertama kita buat class form yang diberi nama MyFormClass. Ini merupakan class yang berfungsi membuat element form (Form Builder atau Form Generator).

    <?php
    class MyFormClass{
        protected $form;
        protected $tag;	
    	
    	function __construct($attrForm = array()){
    	    $str = "\n<form";
    		if(!empty($attrForm)){
    		    foreach($attrForm as $key=>$value){
    			    $str .= empty($key)? "" : " ".$key." = \"".$value."\"";
    			}
    		}
    		$str .= ">";
    		$this->form = $str;
    	}
    	
    	public function addOpenTag($tag,$legend = ""){
    	    $this->tag = $tag;
    		if(strtolower($tag) == "legend")
    			$this->form .= "\n<$tag>\n".$legend;
    		else
    			$this->form .= "\n<$tag>";
    	}
    	
    	public function addCloseTag($tag = ""){
    	    $this->form .= empty($tag)? "\n</".$this->tag.">" : "\n</".$tag.">";
    	}
    	
    	public function addSingleTag($tag){
    	    $this->form .= "\n<$tag />";
    	}
    	
    	public function addInput($input = array()){
    	    $label ="";
    		$str = "";
    		$text = "";
    		if(!empty($input)){
    		    $str .= "\n<input";
    		    foreach($input as $key => $value){
    				if(strtolower($key) != "label" and strtolower($key) != "text"){
    					if($value != "checked")
    						$str .= empty($key)? "" : " ".$key." = \"".$value."\"";
    					else
    						$str .= " checked";
    				}else
    				    (strtolower($key) == "label")?$label = "\n<label>".$value."</label>" : $text = $value;
    			}
    			$str .= ">";
    		}
    		$str = $label.$str.$text;
    		$this->form .= $str;
    	}
    	
    	public function startSelect($select=array()){
    	    $str = "";
    		$label = "";
    		if(!empty($select)){
    		    $str .= "\n<select";
    			foreach($select as $key => $value){
    			    if(strtolower($key) != "label")
    					$str .= empty($key)? "" : " ".$key." = \"".$value."\"";
    				else
    				    $label = "\n<label>".$value."</label>";
    			}
    			$str .= ">";
    		}
    		
    		$str = $label.$str;
    		$this->form .= $str;
    	}
    	
    	public function endSelect(){
    	    $this->form .= "\n</select>";
    	}
    	
    	public function addOptions($option = array()){
    	    $str = "";
    		$label = "";
    		if(!empty($option)){
    		    $str .= "\n<option";
    		    foreach($option as $key=>$value){
    			    if(strtolower($key) != "text")
    				    $str .= empty($key)? "" : " ".$key." = \"".$value."\"";
    				else
    				    $label = $value;
    			}
    			$str .= ">";
    			$str .= $label;
    			$str .= "</option>";
    		}
    		
    		$this->form .= $str;
    	}
    	
    	public function addTextarea($textarea = array()){
    	    $str = "";
    		$label = "";
    		if(!empty($textarea)){
    		    $str .= "\n<textarea";
    			foreach($textarea as $key => $value){
    			    if(strtolower($key) != "label")
    				    $str .= empty($key)? "" : " ".$key." = \"".$value."\"";
    				else
    				    $label = "\n<label>".$value."</label>";
    			}
    			$str .= "></textarea>";
    		}
    		
    		$str = $label.$str;
    		$this->form .= $str;
    	}
    	
    	public function displayForm(){
    	    $this->form .= "\n</form>";
    		echo $this->form;
    	}
    }
    ?>
    

    Simpan file tersebut dengan nama MyFormClass.php

    Pada class form ini, array dipilih menjadi tipe inputan setiap method yang akan membentuk element form. Dengan indeks array menjadi atribut element form, dan nilai array pada indeks tersebut menjadi nilai atribut element form. Kita tambahkan juga indeks berupa string β€œlabel” untuk menambahkan tag label pada element form yang akan dibuat, dengan isi dari tag label merupakan nilai dari indeks tersebut.

    Realnya seperti apa? Dapat kita lihat pada tahap pengimplementasian. πŸ™‚

  2. Tahap kedua kita buat class tabel yang diberi nama MyTableClass. Ini merupakan class yang berfungsi membuat element tabel HTML (Table Builder, atau Tabel Generator).

    <?php
    class MyTableClass{
    	private $rowsData = array();
    	private $cellData = array();
    	private $cell = array();
    	private $cellValue;
    	private $strTable;
    	
    	function __construct($infoTable = array()){
    		$this->strTable = "\n<table";
    		if(!empty($infoTable)){
    		    foreach($infoTable as $key => $value){
    			    $this->strTable .= " ".$key." = \"".$value."\"";
    			}
    		}
    		$this->strTable .= ">";
        }
    	
    	//Input fungsi ini adalah array dengan 
    	public function addRow($rowsData = array()){
    		$this->rowsData[] = $rowsData;
    		$this->addCellData($this->cell);
    	}
    	
    	public function addHeader($headersData = array()){
    	    $str = "\n<th";
    		if(!empty($headersData)){
    		    foreach($headersData as $key => $value){
    			    if(strtolower($key) == "data" )
    				    $this->cellValue = $value;
    			    else
    				    $str .= " ".$key." = \"".$value."\"";
    			}
    		}
    		$str .= ">";
    		$str .= "\n".$this->cellValue;
    		$str .= "\n</th>";
    		$this->cellValue = "";
    		$this->strTable .= $str;
    	}
    	
    	public function addCell($cellData = array()){
    	    $this->cell[] = $cellData;
    	}
    	
    	private function addCellData($cellData = array()){
    	    if(!empty($cellData)){
    		    $this->cellData[] = $cellData;
    			$this->cell = array();
    		}
    	}
    	
    	public function buildTable(){
    	    $this->addCellData($this->cell);
    		for($i=0;$i<count($this->rowsData);$i++){
    		    $this->strTable .= "\n<tr";
    			foreach($this->rowsData[$i] as $key => $value){
    			    $this->strTable .= " ".$key." = \"".$value."\"";
    			}
    			$this->strTable .= ">";
    			for($j=0;$j<count($this->cellData[$i]);$j++){
    			    $this->strTable .= "\n<td";
    				foreach($this->cellData[$i][$j] as $key => $value){
    				    if(strtolower($key) == "data"){
    					    $this->cellValue = $value;
    					}else{
    					    $this->strTable .= " ".$key." = \"".$value."\"";
    					}
    				}
    				$this->strTable .= ">";
    				$this->strTable .= "\n".$this->cellValue;
    				$this->strTable .= "\n</td>";
    				$this->cellValue = "";
    			}
    			$this->strTable .= "\n</tr>";
    		}
    	}
    	
    	public function displayTable(){
    	    $this->strTable .= "\n</table>";
    		echo $this->strTable;
    	}
    }
    
    ?>
    

    Simpan file tersebut dengan nama MyTableClass.php

    Sama seperti class form yang kita buat. Pada class tabel ini kita gunakan tipe array sebagai masukan yang mendefinisikan atribut setiap element tabel

  3. Tahap ke Tiga, ini merupakan tahap pembentukan form dari class form yang kita buat.

    <html>
    <head>
        <title>Latihan Form dengan class PHP</title>
    </head>
    <body>
    <?php
    include "MyFormClassNew.php";
    
    $form = new MyFormClass(array("name"=>"myform","method"=>"post","action"=>"proses.php"));
    $form->addOpenTag("fieldset");
    $form->addOpenTag("legend","Form Input Data");
    $form->addCloseTag();
    //Mulai baris ini kita memasang element form
    $form->addOpenTag("p");
        $form->addInput(array("label"=>"Nama Anda","type"=>"text","name"=>"txtNama","id"=>"txtNama","size"=>"15","maxlength"=>"15"));
    $form->addCloseTag();
    $form->addOpenTag("p");
        $form->addInput(array("label"=>"Jenis Kelamin","type"=>"radio","text"=>"Pria","name"=>"gender","value"=>"pria"));
    	$form->addInput(array("type"=>"radio","text"=>"Wanita","name"=>"gender","value"=>"wanita"));
    $form->addCloseTag();
        
    	$bulan = array("Januari","Febuari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember");
    $form->addOpenTag("p");
        $form->startSelect(array("label"=>"Bulan Lahir","name"=>"selBulan"));
    	foreach($bulan as $key => $value)
    	    $form->addOptions(array("value"=>$key+1,"text"=>$value));
    	$form->endSelect();
    $form->addCloseTag();
    $form->addOpenTag("p");
        $form->addTextarea(array("label"=>"Deskripsikan diri anda","rows"=>"6","cols"=>"18","name"=>"txtSelf"));
    $form->addCloseTag();
    $form->addOpenTag("p");
        $form->addInput(array("type"=>"checkbox","name"=>"chkSetuju","value"=>"ok","text"=>"Saya bersedia mengirimkan data diri saya"));
    $form->addCloseTag();
    $form->addOpenTag("p");
        $form->addInput(array("type"=>"submit","value"=>"Kirim"));
    $form->addCloseTag();
    //Pemasangan element form berhenti sampai disini
    $form->addCloseTag("fieldset");
    $form->displayForm();
    ?>
    </body>
    </html>
    

    Simpan dengan nama index.php

  4. Tahap keempat, ini adalah tahap implementasi terakhir. Disini kita akan menampilkan hasil inputan yang telah kita lakukan. Hasil inputan ditampilkan dalam bentuk tabel, menggunakan method yang terdapat pada class tabel yang sudah kita buat sebelumnya.

    <?php
    include "MyTableClass.php";
    $table = new MyTableClass(array("cellpadding"=>"10","cellspacing"=>"5","border"=>"1"));
    $table->addRow();
    foreach($_POST as $key => $value){
        $table->addHeader(array("data"=>$key));
    }
    $table->addRow();
    foreach($_POST as $key => $value){
        $table->addCell(array("data"=>$value));
    }
    $table->buildTable();
    $table->displayTable();
    ?>
    

    Simpan dengan nama proses.php.
    Setelah semua selesai, sekarang tinggal jalankan file index.php (jangan lupa tekan tombol submitnya πŸ™‚ )

Yupz,.. selesai sudah pembahasan kita kali ini. Class Form Builder dan Class Table Builder yang dibuat memang masih belum sempurna, mungkin masih banyak kekurangannya disana sini.
Well, seperti yang telah disampaikan sebelumnya, disini kita sama-sama belajar. Apabila sahabat punya kritik dan saran yang membangun, silahkan sampaikan melalui fasilitas komentar yang telah disediakan.

Selamat bersenang – senang πŸ™‚

Related Post

Older Posts »

Create a free website or blog at WordPress.com.