Saturday 2 February 2013

Overload Method dengan __Call() di PHP || OOP PHP

Overload kali ini berbeda dengan overload method pada postingan sebelumnya... perbedaannya adalah kalo pada postingan yang kemarin overload method dengan memanfaatkan parameter, tetapi kali ini menggunakan magic method __call() .. bedanya apa ?? ya... nanti dilihat aja lah ya... hehee magic method __call() sebenarnya di sediakan untuk memanggil suatu method yang tidak terdefinisikan dalam sebuah class.. jika satu class mempunyai method __call() , maka jika suatu saat class ini dijadikan sebagai instan object dan instan object nya memanggil suati method yang tidak terdefinisikan dalam class itu maka akan tetap berjalan dan tidak akan terjadi error.. dari sini method __call() bisa dijadikan sebuah fasilitas untuk mengoverload sebuah method.. oke langsung saja ke kode nya...

<?php
 class Contoh{
  public function __call($name,$params){
   
  }
 }
?>  
coba ente perhatikan pada function __call() , ada 2 buah parameter.. parameter pertama merupakan nama method yang dipanggil, sedangkan parameter ke dua adalah parameter bertipe array dari method yang dipanggil.. coba perhatikan kode program ini
<?php
 class Contoh{
  public function __call($name,$params){
   return "My Name is Rizal";
  }
 }
?>
<html>
<head>
 <title>Overload</title>
</head>
<body>
 <?php 
  $obj = new Contoh();
  echo $obj->HelloWord();
 ?>
</body>
</html>  
Perhatikan pada class contoh tidak terdefinisikan function HelloWord() tetapi pada saat instan object memanggil method HelloWord tidak akan terjadi error.. tetapi akan diarahkan ke function __call() dan di kembalikan sebuah nilai... begitu...lalu bagaimana jika ingin menggunakan parameter ?? cobalah kode ini...
<?php
 class Contoh{
  public function __call($name,$params){
   return "My Name is ".$params[0];
  }
 }
?>
<html>
<head>
 <title>Overload</title>
</head>
<body>
 <?php 
  $obj = new Contoh();
  echo $obj->HelloWord("Rizal");
 ?>
</body>
</html>  
Pada contoh kode program diatas ente bisa lihat pada instan object yang memanggil method hello word ane kasi parameter dan pada function call nilai yang dikembalikan menampung sebuah array yaitu params[0] ... array itu adalah parameter yang kirim dari instan object... kan cuma ada satu parameter to ?? jadinya ya  params[0]... gitu... untuk beberapa parameter begini kodenya...
<?php
 class Contoh{
  public function __call($name,$params){
   return "Your midle name is ".$params[0]." and your last name is ".$params[1];
  }
 }
?>
<html>
<head>
 <title>Overload</title>
</head>
<body>
 <?php 
  $obj = new Contoh();
  echo $obj->HelloWord("Rizal", "Afani");
 ?>
</body>
</html>  
Lalu bagaimana kalo pengen dalam satu kelas ada 2 method yang masing2 mempunyai overload ?? ya sebenarnya si gampang.. tinggal mengatur return value nya saja... kan sudah ada to parameter $name dari magic method __call() yang bisa dijadikan sebagai kondisi... kalo ane terangin secara rinci bisa panjang banget ni postingan.... hahahaha bukannya gak mau... tapi ane juga pengen ente berusaha menganalisa sendiri sebuah program.. blajar mandiri lah... heheee tapi tetep ane kasi contohnya buat ente analisa... begini contoh kodenya ... silahkan di analisa...
<?php
 class Contoh{
  private $myName;
  private $MyAdress;
  
  public function __call($name,$params){
   if($name == "HelloWord"){
    if(sizeof($params) == 1){
     return "Your name is ".$params[0]."<br />";
    }else if(sizeof($params) == 2){
     return "Your midle name is ".$params[0]." and your last name is ".$params[1]."<br />";
    }else{
     return "No Overload Constructor like you define<br />";
    }
   }else if($name == "Stikom"){
    return "this Stikom <br />";
   }else{
    return "Your Function is Undefined<br />";
   }
  }
 }
?>
<html>
<head>
 <title>Overload</title>
</head>
<body>
 <?php 
  $obj = new Contoh();
  echo $obj->HelloWord("Rizal");
  echo $obj->HelloWord("Rizal","Afani");
  echo $obj->HelloWord("Rizal","Afani",0);
  echo $obj->Stikom();
  echo $obj->UNIBA();
 ?>
</body>
</html>  
Dengan berakhirnya postingan ini berakhir juga postingan ane tentang OOP PHP... tapi kalo ada fitur yang baru dari OOP yang ane tau nanti i.Alloh juga ane share kok.. jadi tetep jadi pengunjung setia blog ini ya ... keep cooding (y)

3 comments: