Monday, December 8, 2014

Tutorial PHP OOP Part 23 : Apa itu Late Static Binding ?

Pada PHP 5.3.0, PHP mengimplementasikan fitur yang disebut dengan "Late Static Binding". Fitur ini digunakan untuk mereference sebuah class dalam konteks pewarisan static. Lebih tepatnya, fitur Late Static Binding bekerja dengan menyimpan nama class pada akhir "non-forwarding call".

Pada dasarnya ini bermula pada kondisi bahwa keyword self tidak mengijinkan aturan pewarisan (inheritance). Self akan diresolve didalam class dimana dia dipakai. Artinya jika kita menggunakan method yang berada pada parent class dan memanggilnya dari child class, self tidak akan mereference child seperti yang kita inginkan.

Agar lebih jelas perhatikan contoh berikut ini :
 <?php  
 class A {  
   public static function who() {  
     echo __CLASS__;  
   }  
   public static function test() {  
     self::who();  
   }  
 }  
   
 class B extends A {  
   public static function who() {  
     echo __CLASS__;  
   }  
 }  

 B::test();  
 ?>  
JIka contoh diatas dijalankan akan menampilkan A bukan B, meskipun yang memanggil adalah class B. Hal ini terjadi karena nilai dari method static who() diikat oleh keyword self, jadi tidak bisa diwariskan kepada class B sebagai class anak.

Untuk mengatasi hal itu kita menggunakan fitur Late static binding dengan keyword static seperti contoh berikut ini :
 <?php  
 class A {  
   public static function who() {  
     echo __CLASS__;  
   }  
   public static function test() {  
     static::who(); // penggunaan late static binding  
   }  
 }  
   
 class B extends A {  
   public static function who() {  
     echo __CLASS__;  
   }  
 }  
   
 B::test();  
 ?>  
Berbeda dengan contoh sebelumnya, jika program yang ini dijalankan akan menampilkan B berasal dari nama class yang memanggil static who() pada static method test().

Late static binding memperkenalkan cara baru dalam penggunaan keyword static sekaligus mengatasi keterbatasan dari penggunaan sebuah nilai static. Misalnya saat kita menggunakan static, kita harus merepresentasikan nama class dimana static itu pertama kali dibuat. Dengan ini maka nilai static akan terikat (bind) pada runtime class.

Referensi :

0 komentar

Post a Comment