Tutorial PHP: Overloading

Assalamualaikum Semua






      Hallo semua selamat datang kembali. Saya Muhammad Aslam atau panggil saja Mas Lam akan berbagi pengetahuan tentang PHP langsung saja tanpa banyak basa basi lagi yu urang belajar PHP.

OVERLOADING

- Overloading di PHP menyediakan cara agar properti dan method dapat dibuat secara dinamis. Entitas dinamis ini diproses melalui method ajaib yang dapat dibangun di class untuk berbagai jenis tindakan.

- method overloading dipanggil saat berinteraksi dengan properti atau method yang belum dideklarasikan atau tidak terlihat dalam baris program. Sisa dari bagian ini akan menggunakan istilah properti dan method yang tidak dapat diakses untuk merujuk pada kombinasi deklarasi dan visibilitas tersebut.


- Semua method overloading harus didefinisikan sebagai public.

CONTOH #1 OVERLOADING PROPERTIES VIA THE __GET(), __SET(), __ISSET() AND __UNSET() METHODS


<?php

class PropertyText
{
 private $data = array();

 public $declared = 1;

 private $hidden = 2;

 public function __set($name, $value)
 {
  echo "Setting".$name."To".$value;
  $this->data[$name] = $value;
 }

 public function __get($name)
 {
  echo "Getting".$name."\n";
  if (array_key_exists($name, $this->data)) {
   return $this->data[$name];
  }

  $trace = debug_backtrace();
  trigger_error(
   'Unidentified via __get()'.$name.'in'.
   $trace[0]['file'].'on line'.$trace[0]['line'].E_USER_NOTICE
  );
  return null;
 }

 public function __isset($name)
 {
  echo "Is".$name.'Set?';
  return isset($this->data[$name]);
 }

 public function __unset($name)
 {
  echo "Unsetting ".$name.'\n';
  unset($this->data[$name]);
 }

 public function getHidden()
 {
  return $this->hidden;
 }

}

echo "<pre>\n";

$obj = new PropertyText();
$obj->data = 1;
echo $obj->a . "\n\n";

var_dump(isset($obj->a));
isset($obj->a);
var_dump(isset($obj->a));
echo "\n";

echo $obj->declared."\n\n";
echo "Let's experiment with the private property named 'hidden':\n";
echo "Privates are visible inside the class, so __get() not used...\n";
echo $obj->getHidden() . "\n";
echo "Privates not visible outside of class, so __get() is used...\n";
echo $obj->hidden . "\n";


CONTOH #2 OVERLOADING METHODS VIA THE __CALL() AND __CALLSTATIC() METHODS
<?php

class MethodTest
{
 public function __call($name, $arguments)
 {
  // Note: value of $name is case sensitive.
  echo "Calling object method '$name' "
  . implode(', ', $arguments). "\n";
 }
 /** As of PHP 5.3.0 */
 public static function __callStatic($name, $arguments)
 {
  // Note: value of $name is case sensitive.
  echo "Calling static method '$name' "
  . implode(', ', $arguments). "\n";
 }
}

$obj = new MethodTest;
$obj->runTest('in object context');
MethodTest::runTest('in static context'); // As of PHP 5.3.0



Study Kasus:

  • Buatlah interface class dengan nama GayaHidup dengan method sebagai berikut: berbicara, bernafas, makan, berjalan

  • Implementasikan interface tersebut ke class Manusia dan Hewan. Buat minimal 2 objek Manusia dan Hewan yang berbeda
karena pada pembahasan sebelumnya kita telah membuat class manusia dan hewan, pada pembahasan isi kita perlu membuat interface GayaHidup berikut adalah code nya

<?php

interface GayaHidup
{
 public function berbicara();
 public function bernafas();
 public function makan();
 public function berjalan();
}

Selanjutnya masukan kode berikut ke KelompokMakanan.php

include 'GayaHidup.php';

Selanjutnya buka file HewanPeliharaan.PHP dan tambahkan kode pada class seperti berikut

class HewanPeliharaan extends KelompokMakan implements GayaHidup 

selanjutnya tambahkan code dibawah, code ini berfungsi agar tidak mengalami error karena interface harus di implementasikan

public function berbicara()
 {
  echo $this->nama.' Berbicara..';
 }

 public function bernafas()
 {
  echo $this->nama.' Bernafas..';
 }
 public function makan()
 {
  echo $this->nama.' Makan..';
 }
 public function berjalan()
 {
  echo $this->nama.' Berjalan..';
 }

selanjutnya buka Manusia.php lalu tambahkan kode pada class seperti berikut

class Manusia extends KelompokMakan implements GayaHidup

tambahkan code yang sama seperti sebelumnya :

public function berbicara()
 {
  echo $this->nama.' Berbicara..';
 }

 public function bernafas()
 {
  echo $this->nama.' Bernafas..';
 }
 public function makan()
 {
  echo $this->nama.' Makan..';
 }
 public function berjalan()
 {
  echo $this->nama.' Berjalan..';
 }

Selanjutnya buka index.php dan tambahkan code seperti berikut:

<?php

include 'Manusia.php';
include 'HewanPeliharaan.php';

$aslam = new Manusia();
$teman = new Manusia();
$Hewan2 = new HewanPeliharaan();
$Hewan1 = new HewanPeliharaan();

$aslam->nama ='Muhammad Aslam Setiawan Riziq ';
$aslam->jenis_kelamin ='laki-laki ';
$aslam->tanggal_lahir ='31/08/2003';
$aslam->makanan ='Daging ';

$Hewan2->nama ='Kambing';
$Hewan2->bersuara =' mbe';

$teman->nama ='Samid';

echo $aslam->bersuara()."<br>";
echo $aslam->berjalan()."<br>";
echo $aslam->makan()."<br>";
echo $aslam->berbicara()."<br>";
echo $aslam->bernafas()."<br>";

echo $teman->bersuara()."<br>";
echo $teman->berjalan()."<br>";
echo $teman->makan()."<br>";
echo $teman->berbicara()."<br>";
echo $teman->bernafas()."<br>";

echo $Hewan1->bersuara()."<br>";
echo $Hewan1->berjalan()."<br>";
echo $Hewan1->makan()."<br>";
echo $Hewan1->berbicara()."<br>";
echo $Hewan1->bernafas()."<br>";

echo $Hewan2->bersuara()."<br>";
echo $Hewan2->berjalan()."<br>";
echo $Hewan2->makan()."<br>";
echo $Hewan2->berbicara()."<br>";
echo $Hewan2->bernafas()."<br>";
?>

Hasilnya seperti ini


Sekian Terimakasih

Comments