Tampilkan postingan dengan label static keyword. Tampilkan semua postingan
Tampilkan postingan dengan label static keyword. Tampilkan semua postingan

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.