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