Pemrograman Web ~ OOP dengan PHP -Overloading
Assalamualaikum Warohmatullahi Wabarokatu
Halohaloo ini artikel terakhir pembahasan tentang OOP dengan PHP. Kali ini akan membahas tentang Overloading.
Overloading
Overloading di PHP menyediakan cara agar properti dan method dapat dibuat secara dinamis. Entitas dinamis ini diproses melali method ajaib yang dapat dibangun diclass 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 mengunakan istilah properti dan method yang tidak dapat diakses untuk merujuk pada kombinasi deklarasi dan visibilitas tersebut. Semua method overloading harus didefinisikan sebagai public.
Contoh Overloading Properties
<?php
class PropertyTest
{
//lokasi overload
private $data = array();
//overload tidak digunakan saat mengdeklar properti
public $declared = 1;
//overload hanya bisa digunakan saat diluar kelas
private $hidden = 2;
public function __set($name, $value)
{
echo "Setting '$name' to '$value'\n";
$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(
'Undefiened property via _get():' . $name . 'in' .
$trace[0]['file'] . 'on line' . $trace[0]['line'],
E_USER_NOTICE
);
return null;
}
//as php5.1.0
public function __isset($name)
{
echo "Is'$name'set'\n";
return isset($this->data[$name]);
}
//as php 5.1.0
public function __unset($name)
{
echo "Unsetting'$name'\n";
unset($this->data[$name]);
}
public function getHidden()
{
return $this->hidden;
}
}
echo "<pre>\n";
$obj = new PropertyTest;
$obj->a = 1;
echo $obj->a . "\n\n";
var_dump(isset($obj->a));
unset($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";
Dalam Codingan diatas mengunakan method : _get() , _set(), isset(), unset()
Contoh Overloading Method
<?php
class MethodTest
{
public function __call($name, $arguments)
{
// nilai dari $name case sensitive
echo "Calling object method'$name'"
. implode(',', $arguments) . "\n";
}
//di PHP 5.3.0
public static function __callStatic($name, $arguments)
{
echo "Calling static method '$name'"
. implode(',', $arguments) . "\n";
}
}
$obj = new MethodTest;
$obj->runTest('in object context');
MethodTest::runTest('in static context');// di PHP 5.3.0
Dalam Codingan diatas menggunakan Method : _CALL() , _CALLSTATIC()
Studi 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.
1. Buat Interface Class gayahidup.php
<?php
interface GayaHidup
{
public function berbicara();
public function bernafas();
public function makan();
public function berjalan();
}
2. Tambahkan Implements di Hewan Peliharaan dan Tambahkan semua Method yang ada di gayahidup.php agar tidak error
class hewanpeliharaan extends kelompokmakan implements GayaHidup
{
public $namahewan;
public $jenis;
public function __construct($namahewan, $jenis, $makanan)
{
echo 'Peliharaan Saya ' . '<br>';
$this->namahewan = $namahewan;
echo 'Bernama ' . $namahewan . '<br>';
$this->jenis = $jenis;
$this->makanan = $makanan;
}
public function berbicara()
{
echo $this->namahewan . ' Berbicara..';
}
public function bernafas()
{
echo $this->namahewan . ' Bernafas..';
}
public function makan()
{
echo $this->namahewan . ' Makan..';
}
public function berjalan()
{
echo $this->namahewan . ' Berjalan..';
}
3.Lakukan seperti cara kedua di Manusia.php
<?php
include 'kelompokmakan.php';
include 'gayahidup.php';
class Manusia extends KelompokMakan implements GayaHidup
{
public $jenis_kelamin;
public $nama;
public $tanggal_lahir;
public function bersuara()
{
return $this->nama;
}
public function berbicara()
{
echo $this->nama . ' saya bisa Berbicara..';
}
public function bernafas()
{
echo $this->nama . ' saya bisa Bernafas..';
}
public function makan()
{
echo $this->nama . ' saya bisa Makan..';
}
public function berjalan()
{
echo $this->nama . ' saya bisa Berjalan..';
}
4.Buka dan Tambahkan 2 Objek di index.php dari HewanPeliharaan.php dan Manusia.php
<?php
include 'manusia.php';
include 'hewanpeliharaan.php';
$taufik = new Manusia();
$manusa = new Manusia();
$taufik->nama = 'Taufik Muhamad Ramdhan';
$taufik->jenis_kelamin = 'Laki-Laki';
$taufik->tanggal_lahir = '20/11/2002';
$taufik->makanan = 'Capcay';
$manusa->nama = 'Manusia';
$manusa->jenis_kelamin = 'Unknown';
echo '<b>Perkenalan </b> <br>';
echo "nama saya : " . $taufik->bersuara();
echo "<br>";
echo $taufik->berjalan();
echo "<br>";
echo $taufik->makan();
echo "<br>";
echo $taufik->berbicara();
echo "<br>";
echo $taufik->bernafas();
echo "<br>";
$doggy = new hewanpeliharaan('Anjing', 'Kucing', 'Daging');
echo 'bersuara ' . $doggy->suara() . '<br>';
echo 'dan berjenis ' . $doggy->jenis() . '<br>';
echo $doggy->berjalan();
echo "<br>";
echo $doggy->makan();
echo "<br>";
echo $doggy->berbicara();
echo "<br>";
echo $doggy->bernafas();
echo "<br> <br>";
echo '<b>Perkenalan </b> <br>';
echo "nama saya : " . $manusa->bersuara();
echo "<br>";
echo $manusa->berjalan();
echo "<br>";
echo $manusa->makan();
echo "<br>";
echo $manusa->berbicara();
echo "<br>";
echo $manusa->bernafas();
echo "<br>";
$kitty = new hewanpeliharaan('Ucing', 'Anjing', 'Rumput');
echo 'bersuara ' . $kitty->suara() . '<br>';
echo 'dan berjenis ' . $kitty->jenis() . '<br>';
echo $kitty->berjalan();
echo "<br>";
echo $kitty->makan();
echo "<br>";
echo $kitty->berbicara();
echo "<br>";
echo $kitty->bernafas();
echo "<br>";
Comments
Post a Comment