Sunday, June 26, 2016

Pemrograman Berorientasi Object - "Magic" method di PHP

    Pada pemrograman berorientasi object di PHP, ada beberapa function / method dengan nama khusus yang disediakan oleh PHP yang ditandai dengan dua garis bawah(__) yang akan memicu / memanggil action tertentu. Function tersebut seperti __construct(), __destruct(), __call() dll.

__construct()

Function __construct() akan dipanggil ketika suatu object di inisialisasi atau dibentuk. Contoh :

class Bapak{
    
    private $warna_rambut = 'hitam';
    private $warna_kulit  = 'sawo matang';
    public function __construct(){
       echo "object dari class Bapak dibuat";
    }

    public function makan(){
       echo 'makan dengan tangan kanan';
    }

}

ketika membuat object dari class Bapak seperti berikut,

$bapak = new Bapak();
maka secara otomatis function __construct() dikalankan dengan contoh di atas mengeluarkan pesan
 "object dari class Bapak dibuat".

__destruct()

 __destruct() merupakan kebalikan dari function __construct(). __destruct() dijalankan ketika kita menutup object / membuang object dari class yang sudah tidak digunakan. Ketika kita membuat sebuah object, kita sedang menggunakan memori untuk menyimpan object tersebut jadi ketika object sudah tidak terpakai, tidak serta merta memory menghapus object tersebut. Jadi dengan menggunakan __destruct() kita bisa melakukan sesuatu ketika object tersebut tidak terpakai seperti menulis log, menghapus file yang sudah tidak digunakan dll. Contoh penggunaan :

class Bapak{
    
    private $warna_rambut = 'hitam';
    private $warna_kulit  = 'sawo matang';
 
    public function __construct(){
       echo "object dari class Bapak dibuat";
       $this->logfile_handle = fopen('/tmp/log.txt', 'w');
    }

    public function __destruct(){
       fclose($this->logfile_handle);
    } 

    public function makan(){
       echo 'makan dengan tangan kanan';
    }

}
pada contoh di atas, ketika object dibuat maka akan menjalankan function __construct() yang melakukan operasi baca file dan ketika object dihancurkan atau tidak digunakan, maka function __destruct() dijalankan untuk menutup file tersebut.

__toString()

Function __toString() berguna ketika kita ingin memanggil sebuah object dan mengeluarkan sesuatu string lewat object tersebut. Contoh :

class Bapak{
    
    private $warna_rambut = 'hitam';
    private $warna_kulit  = 'sawo matang';

    public function __construct($name){
       $this->name = $name;
    }

    public function __toString(){
       echo $this->name." adalah object dari class Bapak";
    }

    public function makan(){
       echo 'makan dengan tangan kanan';
    }

}

dengan menggunakan function __toString() kita bisa mendapatkan output object dengan cara sebagai berikut.

$bapak = new Bapak('Ady');
echo $bapak; // Ady adalah object dari class Bapak

ada beberapa lagi function "magic" yang disediakan oleh PHP seperti __set(), __get(), __sleep(), __wakeup(), __clone() yang penggunaannya bisa sangat bermanfaat dalam efisiensi code pemrograman. Sekian tulisan saya kali ini, kita sambung dilain kesempatan.

Tuesday, June 21, 2016

Pemrograman Berorientasi Object - Pewarisan

     Dalam pemrograman berorientasi object, dikenal istilah pewarisan / inheritance. Inheritance merupakan konsep pemrograman yang membagi source code menjadi class yang saling terhubung satu dengan yang lain. Seperti di dunia nyata, seorang anak mewarisi / mempunyai beberapa sifat bawaan dari orang tua seperti sama sama suka bermain musik, sama sama berambut keriting dll.
    Di dalam pemrograman, kelakuan kelakuan tersebut dapat berupa method / function, sedangkan sifat dapat berupa variable / contanta. Function adalah sebuah kelakuan / fungsi untuk melakukan sesuatu.

Contoh :

class Bapak{
    
    private $warna_rambut = 'hitam';
    private $warna_kulit  = 'sawo matang';
    public function makan(){
       echo 'makan dengan tangan kanan';
    }

    public function tidur(){
       echo 'tidur dengan mendengkur';
    }

    function mainGitar(){
        echo 'main dengan tangan kanan';
    }

}

di atas merupakan contoh class bapak yang mempunyai variable warna rambut dan warna kulit serta mempunyai function makan(), tidur(), mainGitar(). Dibawah ini contoh class yang mewarisi class Bapak.

class Andi extends Bapak{
    
    public function membaca(){
       echo 'membaca novel';
    }

    function mainGitar(){
        echo 'main dengan tangan kiri';
    }

}

class Andi merupakan class turunan dari class Bapak yang ditandai dengan kata extends. dengan demikian, secara default class Andi mewarisi kelakuan / function dari class Bapak seperti function makan(), tidur(), mainGitar(). Sehingga apabila dijalankan keluar hasil sebagai berikut.


$andi = new Andi();
$andi->makan(); // output: makan dengan tangan kanan
$andi->tidur(); // output: tidur dengan mendengkur
$andi->mainGitar(); // output: main dengan tangan kiri
$andi->membaca(); // output: membaca novel

seperti terlihat pada potongan kode di atas, $andi merupakan object / instance dari class Andi. secara default class Andi memiliki function bawaan dari class Bapak dan dapat dipanggil menggunakan object dari class Andi.

Lho... itu yang function mainGitar() kok outputnya "main dengan tangan kiri", bukan "main dengan tangan kanan seperti yang di class Bapak" ?

itu karena function mainGitar() sudah di override oleh class Andi dengan isi yang berbeda. Apa itu override ? Silahkan simak di artikel saya selanjutnya.
  
    kenapa harus pakai pewarisan ? apa untungnya ?

    Bayangin aja kalau kita mau buat CRUD ke database sebanyak 100 tabel dan semuanya pakai insert, update, delete dan membaca isi tabel. Apa gak makan ati kalau buat 100 file yang sama sedangkan yang beda cuma nama tabel dan nama kolomnya aja. trus tiap file ada kode koneksi ke database. Dengan konsep pewarisan semua kode itu bisa diringkas dan tentunya dengan kemampuan yang sama. Dan masih ada banyak lagi keuntungan yang didapat dengan catatan anda mau mencobanya sendiri.
 
    Akhir kata, terima kasih telah mampir dan meluangkan waktu membaca tulisan saya kali ini.

Monday, September 14, 2015

Hak akses Object di Php ( Public, Protected, Private )

     Di dalam konsep pemrograman berorientasi object (OOP), setiap attribut atau function dapat di atur penggunaannya menggunakan keyword public, protected, atau private. Hal ini berguna untuk membatasi penggunaan attribute atau function. Contoh : anda punya sebuah function untuk koneksi ke database dan function tersebut hanya boleh digunakan oleh class yang berhubungan dengan database seperti melakukan query insert, update, delete atau read.
  1. public

     keyword public digunakan untuk attribute / variabel dan function yang bisa di gunakan atau diakses dari class manapun. Sebagai contoh adalah seperti jalan raya yang bisa digunakan oleh siapapun.
    <?php
    class Makhluk_Hidup{
      var $berat;
      public $tinggi;
     
      function __construct(){
     
      }
      function bernafas($nama,$alat){
        echo $nama." bernafas dengan ".$alat;
      }
      public function makan($makanan){
        echo "makan ".$makanan;
      }
      
    }
    ?>
    
    di atas merupakan contoh class bernama Makhluk_hidup yang memiliki attribute  berat dan tinggi. Pembuatan function tanpa disertai keyword public, protected, atau private secara default akan di anggap sebagai public. Sedangkan attribute dengan keyword var dianggap sebagai public. Contoh penggunaan :

    $hidup = new Makhluk_Hidup();
    $hidup->bernafas('manusia','paru-paru');//work
    $hidup->makan('nasi');// work
    

  2. private

     keyword private digunakan untuk attribute / variabel dan function yang hanya bisa di gunakan atau diakses dari classitu sendiri. Sebagai contoh, misalnya kita punya celana dalam yang hanya kita yang bisa memakainya sedangkan orang lain tidak boleh menggunakannya. contoh penggunaan :

    <?php
    class Makhluk_Hidup{
     var $berat;
     var $tinggi;
     
     function __construct(){
      
     }
     
     public function bernafas($nama,$alat){
      echo $nama." bernafas dengan ".$alat;
     }
     
     private function makan($makanan){
      echo "makan ".$makanan;
     }
     
    }
    
    class Manusia extends Makhluk_Hidup{
     
     function __construct(){
      echo "loading bernafas <br/>";
     }
     function makan($makanan){
      $this->makan($makanan);
     }
     
    }
    $adi = new Manusia();
    $adi->bernafas('adi','paru-paru'); // work
    $adi->makan('nasi');// not work
    ?>
    
    di atas merupakan contoh penggunaan keyword private. $adi adalah object dari class Manusia yang merupakan class turunan dari class Makhluk_Hidup. kita bisa memanggil function / method bernafas dari object $adi tapi tidak bisa mengakses function makan dari object $adi karena function makan merupakan function private yang hanya bisa di akses oleh class Makhluk_Hidup.

  3. protected

     keyword protected digunakan untuk attribute / variabel dan function yang hanya bisa di gunakan atau diakses dari classitu sendiri dan class turunan. Sebagai contoh, misalnya saya merupakan anak dari bapak saya. Dan bapak saya mempunyai motor dan rumah yang saya tentu bisa menggunakan rumah dan motor kepunyaan bapak saya. Sedangkan tetangga saya tidak bisa menggunakan motor dan rumah milik bapak saya tersebut.Contoh penggunaan :

    <?php
    class Makhluk_Hidup{
     var $berat;
     var $tinggi;
     
     function __construct(){
      
     }
     
     function bernafas($nama,$alat){
      echo $nama." bernafas dengan ".$alat;
     }
     
     function makan($makanan){
      echo "makan ".$makanan;
     }
     protected function berkembang_biak($cara){
      echo "berkembang biak dengan ".$cara;
     }
    }
    
    class Manusia extends Makhluk_Hidup{
     
     function __construct(){
      echo "loading bernafas <br/>";
     }
     function bekerja($tempat){
      echo "bekerja di ".$tempat;
     }
     function biak($cara){
      $this->berkembang_biak($cara);
     }
     
    }
    class Tumbuhan{
     
     function tes($cara){
      $this->berkembang_biak($cara);
     }
    }
    $manusia = new Manusia();
    $manusia->biak('beranak');// work
    $padi = new Tumbuhan();
    $padi->tes('beranak');// not work
    
    class Tumbuhan tidak bisa menggunakan function berkembang_biak() yang berada di class Makhluk_Hidup karena function  berkembang_biak() merupakan function protected yang hanya bisa di akses class Makhluk_Hidup dan class turunan dari class Makhluk_hidup.

        Sekian tulisan saya kali ini. Mohon maaf apabila ada kesalahan penulisan saya lanjutkan di lain kesempatan. Terima kasih.

    referensi :http://php.net/manual/en/language.oop5.visibility.php

Tuesday, August 18, 2015

Propel Criteria Object

      Untuk menampilkan data dari database ke progam, kita pasti tidak lepas dari query ke database seperti perintah SELECT, INSERT, DELETE, dan lain sebagainya. Secara default, symfony 1.4 menggunakan ORM untuk interaksi dengan database. ORM yang digunakan adalah PROPEL dan DOCTRINE. Dan untuk tulisan saya kali ini dan tulisan saya selanjutnya akan menggunakan PROPEL.

Menampilkan Semua Data

      Untuk menampilkan semua data, biasanya kita menggunakan query SELECT * FROM .....Coba lihat kode berikut.


public function executeIndex(sfWebRequest $request)
  {
    $this->barangs = BarangPeer::doSelect(new Criteria());
  }

di atas merupakan function index yang berada di direktori inventory/apps/frontend/modules/liststok/action/actions.class.php.


$this->barangs = BarangPeer::doSelect(new Criteria());

function doSelect()merupakan function yang digunakan untuk menampilkan data. doSelect() mempunyai parameter object dari Criteria, juka object Criteria kosong, maka doSelect() akan menampilkan semua data dari table di database atau hasilnya sama dengan perintah "SELECT * FROM BARANG". BarangPeer merupakan model object dari tabel yang berada di database. Untuk mempelajari lebih jauh tentang object peer, anda bisa buka di direktory lib/model project symfony anda.

Menggunakan Criteria

      Criteria digunakan untuk membuat query sql dengan berbagai kriteria yang di inginkan seperti where, order by, limit dan lain lain. Untuk menggunakan Criteria anda harus mendefinisikan object dari criteria terlebih dahulu.

$criteria = new Criteria();

$criteria merupakanonject dari Criteria yang digunakan untuk memanipulasi criteria yang di inginkan.


$criteria = new Criteria();
$criteria->add(BarangPeer::STOCK,0,Criteria::EQUAL);
$this->barangs = BarangPeer::doSelect($criteria);

di atas sama dengan perintah "SELECT * FROM BARANG WHERE STOCK=0". Criteria::EQUAL digunakan untuk mencari data yang sama. Ada beberapa Criteria yang disediakan oleh Propel :


Criteria::EQUAL
Criteria::NOT_EQUAL
Criteria::GREATER_THAN, Criteria::GREATER_EQUAL
Criteria::LESS_THAN, Criteria::LESS_EQUAL
Criteria::LIKE, Criteria::NOT_LIKE
Criteria::CUSTOM
Criteria::IN, Criteria::NOT_IN
Criteria::ISNULL, Criteria::ISNOTNULL
Criteria::CURRENT_DATE, Criteria::CURRENT_TIME,
Criteria::CURRENT_TIMESTAMP

sesuai dengan namany, anda pasti sudah bisa menebak untuk apa Criteria tersebut.

      Sementara cukup sekian tulisan saya kali ini. Saya lanjutkan di lain kesempatan. Terima kasih.

references : http://symfony.com/legacy/doc/jobeet/1_3/en/06?orm=Propel

Sunday, July 12, 2015

Membuat Modul di Symfony 1.4

      Selamat siang, melanjutkan tulisan saya sebelumnya tentang symfony, kalo sebelumnya kita sudah membuat aplikasi, model, form, dan filter, kali ini saya lanjutkan dengan membuat modul. modul merupakan folder / direktori dari setiap menu yang ada dalam aplikasi. Dalam modul terdapat action atau controller, template yang berisi file kode html atau tampilan dan file pendukung lainnya. Modul mempunyai dua jenis, yaitu modul admin dan tidak admin. Langsung saja ke TKP.

Modul Non Admin

      Untuk membuat modul non admin, kita tidak usah repot repot menulis kode satu persatu secara full manual, cukup ketik perintah berikut.

symfony propel:generate-module --non-verbose-templates --with-show nama_aplikasi nama_module nama_model 

kode di atas akan menghasilkan modul di dalam aplikasi yang agan tentukan. Contoh


kode di atas, saya membuat modul liststok pada aplikasi frontend dengan menggunakan model barang. Maka struktur direktori aplikasi frontend saya jadi seperti ini.


di dalam folder module terdapat folder modul liststok yang berisi folder actions dan template. template berisi file tampilan yang di dalamnya ada syntax html untuk membuat tampilan. Dan pada folder actions terdapat file action.php yang merupakan action / controller untuk modul liststok. Untuk menjalankannya, buka pada browser agan url

http://localhost/symfony/web/frontend_dev.php/liststok

symfony merupakan nama project agan, frontend_dev.php adalah nama aplikasi yang agan buat dan liststok adalah nama module yang akan di panggi. Dan coba lihat hasilnya. Kita sudah punya halaman yang sudah lengkap dengan operasi CRUD di dalamnya. Dan kira kira seperti inilah jadinya


Module Admin

       Module admin adalah module yang sudah dilengkapi dengan operasi CRUD, filter,sorting data. Jadi proses pembuatan aplikasi menjadi lebih cepat. Untuk membuat modul admin, ketik dan jalankan perintah berikut pada CMD.

symfony propel:generate-admin nama_aplikasi nama_model --module=nama_module

dan berikut adalah contoh yang saya pakai


syntax di atas saya membuat modul kategori di dalam aplikasi backend. Sehingga struktur folder aplikasi backend saya menjadi seperti berikut.


dan hasilnya di browser seperti berikut


kita sudah punya menu kategori lengkap dengan operasi CRUD, filter, dan sorting. Namun tampilan di atas sangat standart, kurang enak di lihat. Symfony sudah menyediakan tampilan default menu admin generator. Untuk menggunakannya cukup jalankan perintah berikut di CMD.

symfony plugin:publish-assets

dan coba muat ulang halaman admin tadi. Dan seperti inilah kira kira
 

Sementara cukup sekian tulisan saya kali ini. Insya allah saya lanjutkan di lain kesempatan.

Generate Aplikasi di Symfony 1.4

     Selamat pagi pemirsa, melanjutkan tulisan sebelumnya mengenai framework php symfony, kali ini saya lanjutkan bagaimana membuat aplikasi di symfony 1.4.

Koneksi Database

      sebagi contoh, di sini saya membuat database aplikasi inventory barang. Dengan struktur tabel seperti pada gambar di bawah.

untuk membuat koneksi ke database, buka file databases.yml yang berada pada folder config.

all:
  propel:
    class:        sfPropelDatabase
    param:
      classname:  PropelPDO
      dsn:        mysql:dbname=inventory;host=localhost
      username:   root
      password:   
      encoding:   utf8
      persistent: true
      pooling:    true

silahkan isi sesuai koneksi ke database agan.
 sekarang waktunya kita bermain dengan command promt atau CMD. Cekidot.

Membuat Aplikasi

      Buka CMD dan masuk ke direktori project symfony dan ketikkan perintah berikut.

symfony generate:app nama_aplikasi

di atas adalah syntax untuk membuat aplikasi.Di sini saya membuat dua aplikasi yaitu frontend dan backend. Frontend untuk aplikasi yang akan di akses oleh user umum dan backend adalah aplikasi yang akan di akses oleh user di sisi admin.

dan hasilnya folder app saya terdapat dua folder aplikasi yaitu backend dan frontend sesuai perintah yang saya buat.

Menulis Schema

      Schema adalah file yang mendefinisikan struktur tabel di database. Schema berguna untuk membuat form, membuat model, bermigrasi ke DBMS yang lain dll. file Schema terdapat di folder config/schema.yml.
       Untuk menulis schema berdasarkan database yang telah dibuat, ketikkan perintah berikut di CMD.

symfony propel:build-schema

karenasaya memakai ORM Propel, maka syntax di atas dan syntax syntax yang lain nanti akan memakai propel sebagai ORM nya. Setelah perintah di atas di jalankan, buka file config/schema.yml dan lihat apa yang terjadi. File otomatis telah terisi sesuai dengan struktur tabel yang agan buat di database.

Membuat Model

       Model adalah class class yang akan dibuat untuk berinteraksi dengan tabel di database seperti melakukan perintah insert, read, update, delete. Folder model terdapat pada folder lib/model. Untuk membuat model tidak perlu membuat manual satu per satu, tetapi cukup dengan menuliskan syntax berikut pada CMD dan jalankan.

symfony propel:build-model

setelah di jalankan, coba lihat di folder lib/model.Maka otomatis kita mempunyai file model dan file Peer untuk kita sesuai dengan tabel yang ada di database. Dengan file model inilah kita akan berinteraksi dengan tabel tabel di database.

Membuat form

      Udah tahu form kan ? form adalah media kita melakukan input data. Form seperti textfield, textarea,radiobutton dll. Di symfony, kita tidak perlu susah susah membuatnya manual. Bayangkan jika tabelnya ada ratusan, butuh berapa hari untuk membuatnya. Untuk membuat form, cukup jalankan perintah berikut di CMD.

symfony propel:build-form

dan lihat di folder lib/form. Kita sudah mempunyai form sesuai dengan tabel yang ada di database.

Membuat Filter

      Sekarang filter. Apa itu filter ? Filter adalah semacam form pencarian data yang biasanya ada berdampingan dengan tabel. Filter berfungsi untuk form pencarian maupun filter data. Kebayangkan ssahnya nyari data satu per satu di tabel kalo gak ada filter ?. Untuk membuatnya gak perlu susah susah ngoding satu persatu. Cukup jalankan perintah berikut di CMD.
 
symfony propel:build-filter

maka kita sudah mempunyai file filter yang berada di folder lib/filter

Sementara cukup sekian dulu tulisan ini. Kita sambung di lain kesempatan untuk artikel selanjutnya tentang framework symfony 1.4. See You.

Wednesday, July 8, 2015

Instalasi Symfony 1.4

      Selamat pagi, lama banget rasanya saya gak nulis di blog ini. Mungkin karena akhir akhir ini lagi sibuk sama berbagai kegiatan jadi belum sempat update tulisan di blog ini. Mumpung kali ini lagi agak longgar, saya mau nambah coretan baru tentang framework php.

     Kenapa framework ? apa ada yang salah dengan php native ? untuk jawaban pertanyaan tersebut saya kira sudah banyak di bahas di blog lain salah satunya di sini. Dan framework php pun ada buanyak banget dan gratis. Ada yang buatan Indonesia sendiri, ada yang dari luar. namun kali ini saya akan membahas tentang symfony versi 1.4 yang kebetulan sedang saya pakai di tempat kerja. Langsung aja Cekidot.

  1. Silahkan download package symfony 1.4 yang saya pakai di sini  atau yang versi asli di sini.
  2. Untuk tutorial instalasi versi asli bisa di lihat di sini 
  3. Extrak file hasil download ke dalam folder webserver agan, contoh saya pakai xampp jadi saya extrak di c:\\xampp\htdocs\
  4. Rename sesuai dengan nama project yang akan agan buat.
  5. Buka cmd dan masuk ke direktori hasil extrak tadi.
  6. kemudian ketik perintah berikut "lib\vendor\symfony\data\bin\symfony generate:project nama_project --orm=Propel" tanpa tanda petik. nama_project adalah nama folder project yang ari hasil extrak file zip tadi. Propel adalah ORM yang di gunakan.
  7. setelah generate selesai, maka struktur folder akan menjadi seperti berikut.
  8. penjelasan struktur folder sebagai berikut.
     
      Di symfony, satu project bisa terdiri dari banyak aplikasi. Contoh: dalam project SIM terdapat aplikasi frontend untuk aplikasi yang bisa dilihat oleh orang umum, aplikasi backend untuk aplikasi manajemen data oleh admin dll. Untuk membuat aplikasi terlebih dahulu harus mengatur file koneksi database. File konfigurasi database terdapat pada  file databases.yml di dalam folder config. Silahkan di configurasi sesuai database anda.

      Sementara cukup sekian tulisan saya kali ini, semoga masih ada kesempatan lain untuk melanjutkan tulisan ini. Sampai jumpa.