Thursday, November 27, 2014

Tutorial PHP OOP Part 11 : Mengenal Operator Scope Resolution (::)

Operator scope resolution (::) atau dalam bahasa indonesia berarti operator resolusi ruang lingkup adalah operator yang membuat kita diijinkan untuk mengakses static, konstanta, properti dan method pada sebuah class. Operator ini juga disebut dengan Paamayim Nekudotayim. Dengan operator (::) kita bisa mengakses secara langsung sesuatu tanpa instantisasi object. Kita pernah membahas operator ini pada tulisan konstanta pada class.

Ketika kita mereference item ini dari luar definisi class, kita harus menggunakan nama class. Mulai pada PHP 5.3.0 dimungkinkan mereferen class menggunakan variabel. Yang penting nilai variabel tidak boleh berupa keyword, seperti self, parent dan static.

Untuk lebih jelas perhatikan cara menggunakan operator :: berikut ini :

1. Menggunakan operator :: dari luar class

 <?php  
 //membuat class
 class MyClass {  
   const KONSTANTA = 'Nilai Konstan';  
 }  

 //memanggil konstanta pada class tanpa instantisasi object  
 echo MyClass::KONSTANTA."<br/>";  

 //menggunakan variabel dalam mereferen class  
 $classname = 'MyClass';  
 echo $classname::KONSTANTA; // As of PHP 5.3.0  
 ?>  

2. Menggunakan operator :: dari dalam class

Ada tiga keyword khusus yang bisa dipakai dalam menggunakan operator :: didalam class, yaitu : static, parent dan self.
 <?php  
 class MyClass {  
   const KONSTANTA = 'Nilai Konstan';  
 }  

 //membuat class anak turunan dari MyClass
 class Anak extends MyClass  
 {  
     public static $my_static = 'Variabel Static';  
     public static function doubleColon() {  

     echo parent::KONSTANTA . "<br/>";  
     echo self::$my_static . "<br/>";  
   }  
 }  

 //memanggil method pada class tanpa instantisasi object  
 //dengan mereferen dari variabel  
 $classname = 'Anak';  
 echo $classname::doubleColon(); // As of PHP 5.3.0  

 //memanggil method pada class tanpa instantisasi object  
 Anak::doubleColon();  
 ?>  

3. Memanggil method pada parent class (class induk)

Ketika class turunan menimpa method yang ada pada class induk (parent class) maka PHP tidak akan memanggil method pada class induk. Jadi bergantung pada class turunan mau menggunakan method pada class induk atau tidak. Cara ini juga dipakai pada Constructors,  Destructors, Overloading, dan definisi Magic method.
 <?php  
 class MyClass  
 {  
   protected function myFunc() {  
     echo "MyClass::myFunc()<br/>";  
   }  
 }  

 class Anak extends MyClass  
 {  
   // Membuat function yang menimpa function pada induk  
   public function myFunc()  
   {  
     // tapi masih bisa mengakses method dari class induk  
     parent::myFunc();  

     echo "Anak::myFunc()<br/>";  
   }  
 }  

 $class = new Anak();  
 $class->myFunc();  
 ?>  
Pada contoh terdapat class induk MyClass yang mempunyai method myFunc dengan perintah menampilkan "MyClass::myFunc()" untuk menandai bahwa tampilan ni dihasilkan oleh method myFunc() pada class induk.

Kemudian kita membuat class turunan bernama Anak dan membuat method bernama myFunc() juga, sama dengan method pada class induk. Kemudian pada method tersebut kita membuat dua perintah, yaitu { parent::myFunc(); } untuk mengakses method myFunc() pada class induk dan { echo "Anak::myFunc()<br/>"; } untuk menampilkan tulisan "Anak::myFunc()".

Referensi :

0 komentar

Post a Comment