Jumat, 21 November 2008

Static Keyword di PHP5

Dengan mendefinisikan sebuah property ataupun method menggunakan kata-kata static, kita dapat mengakses property atau method tersebut tanpa melakukan inisiasi terhadap class yang mendefinisikannya. Dari dokumentasi mengenai static keyword di PHP5, ada beberapa hal yang perlu diperhatikan:
1. Deklarasi kata static harus setelah deklarasi dari visibility, contoh

public static $data;

BUKAN

static public $data;

Jika tidak ada deklarasi visibility, maka property atau method tersebut akan dianggap public.

2. Karena static method dapat dipanggil tanpa melakukan instansiasi dari object, maka penggunaan kata '$this' tidak berlaku untuk method yang menggunakan deklarasi static.

3. Static property tidak dapat diakses menggunaan operator tanda panah (->), tetapi static method dapat diakses dengan operator tanda panah.

Sekarang kita melihat contoh dari property dan method yang bersifat static:

class MyClass {

public static $data = 5;
public $id;

public function setData($data) {
self::$data = $data;
}

public function getData() {
return self::$data;
}

public function setId($id) {
$this->id = $id;
}

public function getID() {
return $this->id;
}

public static function staticGetData() {
return self::$data;
}
}


Dengan class di atas, kode-kode di bawah ini dapat dilakukan:

echo MyClass::$data; // Mengeluarkan angka 5, tidak perlu melakukan intansiasi class
echo MyClass::staticGetData() // Mengeluarkan angka 5, tidak perlu melakukan intansiasi class

$x = new MyClass();
$x->setId(3);

echo $x->getId(); // Mengeluarkan angka 3, harus melakukan instansiasi sebelum dipanggil
echo $x->getData(); // Mengeluarkan angka 5, harus melakukan instansiasi sebelum dipanggil


Nah, sekarang beberapa contoh yang menarik untuk meningkatkan pemahaman terhadap pengaruh static deklarasi terhadap property di class:

$x = new MyClass();
$x->setId(3);
$x->setData(12);

// Print out nilai di X
echo 'Nilai id di $x: ' . $x->getId() . ' -- nilai data di $x: ' . $x->getData() . '<br/>';

$y = new MyClass();
$y->setId(8);
$y->setData(30);

// Print out nilai di Y
echo 'Nilai id di $y: ' . $y->getId() . ' -- nilai data di $y: ' . $y->getData() . '<br/>';

// Sekarang kita coba lagi dengan nilai di X
echo 'Nilai id di $x: ' . $x->getId() . ' -- nilai data di $x: ' . $x->getData() . '<br/>';


Perhatikan baik-baik nilai yang dihasilkan, terutama nilai X di pemanggilan kedua dibandingkan dengan nilai Y. Dengan deklarasi static, property $data di X dan di Y merupakan dua hal yang sama. Perubahan di satu tempat akan merubah hal yang lain. Lalu, apa bagusnya hal tersebut?

Beberapa hal yang dapat dilakukan dengan deklarasi static:
1. Melakukan Singleton Pattern dimana sepanjang proses hanya terdapat satu instance dari class yang kita inginkan.

2. Menggantikan $_GLOBAL variable. Karena kita bisa mengakses property static tersebut dari mana saja, kita bisa menggunakannya untuk menggantikan $_GLOBAL variable. Kelebihannya adalah kita mempunyai namespace karena property didefinisikan di dalam class. Artinya, kita bisa memiliki dua buah property static yang bernama $data di dua class yang berbeda dan tidak perlu khawatir saling bertabrakan. Contoh:

class NumberOne {
public static $data = 3;
}

class NumberTwo {
public static $data = 'test';
}

echo "Value number one: " . NumberOne::$data;
echo "Value number two: " . NumberTwo::$data;


Semoga dapat menambah pengetahuan.

Tidak ada komentar:

Posting Komentar