April 7th, 2009

Mengenal Getter dan Setter Method dalam PHP.

Dalam konsep pemrograman berorientasi objek, sebuah objek memiliki data dan perilaku. Data diimplementasikan sebagai variable (public) sedangkan perilaku diimplementasikan sebagai method (public). Data dalam objek juga sering disebut sebagai property, tetapi sering ada perbedaan mengenai properti (property) ini. Pada bahasa berbasiskan komponen seperti Delphi dan VB, properti (property) selain menyimpan data juga memiliki perilaku, karena ketika properti (property) ditetapkan ternyata ada proses yang dilakukan.

Contok kasusnya adalah ketika kita menetapkan properti (property) Titel pada objek Form, sebagai berikut:

objForm->Title = "Judul baru";

Maka akan terjadi perubahan juga di user interface, yang berarti terjadi suatu proses. Apakah dalam PHP mendukung fitur ini? Secara default tidak, tetapi PHP (versi 5) memiliki fitur interceptor yang bisa kita gunakan, yaitu __get dan __set.

Interceptor __get()

Interceptor __get() merupakan sebuah method yang akan dipanggil jika kode kita berusaha mengambil (get) variable sebuah objek, tetapi variable tersebut sebenarnya tidak ada. Berikut contohnya:

class Person {
    function __get( $name ) {
        return "Anda mengakses property: " . get_class($this).".".$name;
    }
}

$person = new Person();
echo $person->nama;
echo "";
echo $person->umur;

Jika Anda menjalankan script di atas maka akan menghasilkan:

Anda mengakses property: Person.nama
Anda mengakses property: Person.umur

Sekarang sudah faham kan?

Nah dengan menggunakan method __get ini kita bisa mendelegasikan sebuah property ke sebuah method tertentu. Kita akan menggunakan konvensi yang digunaan di dunia Java, yaitu sebuah method getter selalu diawali dengan kata get. Berikut kode lengkapnya:

class Person {
    function __get( $name )
    {
        $getter='get'.$name;
        if ( method_exists($this,$getter) ) {
            return $this->$getter(); // call getter method
        } else {
            // error handling
        }
    }

    function getName()
    {
        return "Ahmad Alif Abdillah";
    }

    function getAge()
    {
        return 4;
    }
}

$person = new Person();
echo "Nama : " . $person->name;
echo "";
echo "Umur : " . $person->age;

Hasilnya adalah:

Nama : Ahmad Alif Abdillah
Umur : 4

Interceptor __set()

Interceptor __set() merupakan sebuah method yang akan dipanggil jika kode kita berusaha menetapkan (set) nilai variable sebuah objek, tetapi variable tersebut sebenarnya tidak ada. Berikut contohnya:

class Person {
    function __set( $name, $value )
    {
        echo "Anda menetapkan nilai property: " . get_class($this).".".$name;
    }
}

$person = new Person();
$person->nama = "Ahmad Alif Abdillah";
echo "";
$person->umur = 4;

Hasilnya adalah:

Anda menetapkan nilai property: Person.nama
Anda menetapkan nilai property: Person.umur

Sebagaimana method __get, kita juga bisa mendelegasikan penetapan sebuah property kepada sebuah method setter. Konvensi yang akan kita gunakan adalah setiap method setter selalu diawali kata set. Berikut contoh kode lengkapnya:

class Person {
    private $_name;
    private $_age;    

    function __set( $name, $value )
    {
        $setter='set'.$name;
        if(method_exists($this,$setter)) {
            $this->$setter($value); // call setter method
        } else {
            // error handling
        }
    }

    function setName( $name ) {
        $this->_name = $name;
        if ( ! is_null( $name ) ) {
            $this->_name = strtoupper($this->_name);
        }
    }

    function setAge( $age ) {
        $this->_age =  strtoupper($age);
    }
}

Pemanfaatan interceptor __get() dan __set() lebih lanjut misalnya digunakan dalam mengakses database. Sebagai contoh, kita bisa mengakses field-field sebuah table seperti memanggil property objek saja.

$record->nama;
$record->umur;

Pembaca yang budiman, penjelasan singkat ini semoga bisa memperluas cakrawala kita semua, bahwa sebeturnya fitur OOP dalam PHP sudah cukup tangguh, rugi kalau nggak dimanfaatkan.

Agus Suhartono

2 Responsesto “Mengenal Getter dan Setter Method dalam PHP.”

  1. bernyan[Yii]Says:
    June 6th, 2009at 20:07

    Wah gw baru tau ada interceptor.
    Apakah karena gw terlewat saat baca Manual PHP / memang dari sumber lain?

    Thanks Bro.

  2. Mas bernyan[Yii],
    kalau Anda memakai Yii Framework, framework tersebut sangat memanfaatkan fitur getter setter.

Leave a Reply