Belajar OOP PHP Overloading (Part 2)

Introduction Overloading PHP

Seperti yang saya janjikan akan berlanjut ke part 2 mengenai overloading methods PHP. Seperti yang dibahas sedikit mengenai overloading PHP dan memang berbeda dengan java. Konsep overloading di PHP lebih pada mengetasi permasalahan, dimana programmer mengakses member properti atau fungsi yang tidak ada didalam kelas tersebut, maka akan otomatis dieksekusi olehnya. Dan di PHP dikenal juga dengan Magic Method dan terdapat didalamnya overloading methods.

About Magic Method __set, __get, __call, __isset

Okey kita langsung pada contoh saja, dimana overloading terdapat fungsi __set, __get(), __isset(), __isset, __call
__set() : akan dieksekusi jika kita melakukan pemanggilan pada variabel yang bukan bagian dari kelas, magsudnya jika kita memanggil suatu variabel yang tidak ada dalam kelas maka fungsi __set() akan dieksekusinya sebagai pengalihannya dan satu lagi fungsi __set() juga akan dijalankan jika properti/variabel yang visibilitynya private dan kita mencoba mengaksesnya secara langsung maka akan dalihkan pula ke method __set() dan artinya private sama dengan memanggil properti/variabel yang tidak ada.

1. __set()

contoh:

<?php
class MagicMethodSet
{
   private $nama="Rifki"

   public function setNama($nama)
   {
      $this->nama = $nama;
   }

   public function getNama()
   {
      return $this->nama;
   }

   public function __set($vn, $vt)
   {
      echo "data {$vn} <br />";
      echo "data {$vt}<br />";
      echo "data tidak dapat diatur <br />";
   }
}

$objek = new MagicMethodSet();
$objek->nama="John";

?>

2. __get()
Digunakan untuk membaca data yang tidak dapat diakses property

3. __call()

Method yang tidak dapat diakses dalam konteks objek

<?php
class MagicMethodCall
{
    public function  __call($name, $arguments)
    {
       echo "calling method '$name' <br />" . implode('|', $arguments);
    }
}

$obj = new MagicMethodCall();
$obj->test('foo','bar','fobar');

?>

Summary

Magic Method __set()

bisa kita lihat bahwa properti yang kita buat itu private sementara kita mencoba akses dan mengubahnya secara langsung, maka akansecara otomatis mengalihkan terhadap fungsi __set().