Nulis-Ilmu.com

Tutorial Elektronika dan Komputer

  • Home
  • Elektronika
  • Komputer
  • Javascript

Tutorial PHP OOP Part 25 : Memahami konsep Polymorphism

9 Desember 2014 By Eko Purnomo

konsep-polymorphism

Polymorphism adalah fitur dari PHP OOP yang berarti pedoman untuk berubah bentuk, sebagaimana asal katanya yaitu poly yang berarti banyak, morph yang berarti bentuk dan isme yang berarti aliran atau pedoman. Barangkali fitur ini mirip dengan perilaku berubah warna kulit pada bunglon. Atau bisa juga mirip dengan perubahan wujud dari robot transformer.

Polymorphism dalam pemrograman PHP berorientasi object

Dalam PHP OOP, fitur ini dipakai untuk menggambarkan perilaku sebuah properti atau method yang bisa berubah-ubah tergantung dari bagaimana dipanggilnya, lalu siapa dan dimana yang memanggilnya. Konsep polymorphism tampak pada penggunaan abstract class dan interface, yaitu bagaimana sebuah kerangka di-implementasikan oleh class-class yang berbeda.

Polymorphism dengan Implementasi Interface

Contoh konsep polymorphism dapat digambarkan melalui sebuah Interface Hewan yang diimplementasi oleh class Burung, kambing dan Ayam. Pada Interface ditaruh beberapa perilaku seperti makan, bergerak dan beranak.

Pada class Burung, bergerak dengan berjalan atau terbang, sedang pada Kambing dan Ayam bergerak dengan berjalan saja. Semikian juga dengan perilaku makan, misalnya Burung makan biji-bijian, Ayam makan bekatul dan kambing makan Rumput.

Dalam hal ini terlihat bahwa method Makan bisa berubah bentuk tergantung dari siapa yang mengimplementasinya. Demikian juga kita bisa menerapkan hal yang sama bagi method-method yang lain yang merupakan perilaku dari masing-masing object hasil instantisasi dari class nama-nama hewan tadi.

Berikut ini contoh polymorphism pada Interface :

 <?php    
Interface Hewan {
public function Makan();
public function Bergerak();
public function Beranak();
}

class Burung Implements Hewan {
public function Makan() {
return "Burung makan biji-bijian<br/>";
}

public function Bergerak() {
return "Burung bergerak dengan berjalan, terbang dan melompat<br/>";
}

public function Beranak() {
return "Burung beranak dengan bertelur<br/>";
}
}

class Kambing Implements Hewan {
public function Makan() {
return "Kambing makan rumput<br/>";
}

public function Bergerak() {
return "Kambing bergerak dengan berjalan dan berlari<br/>";
}

public function Beranak() {
return "Kambing beranak dengan melahirkan<br/>";
}
}

$burung = new Burung;
$kambing = new Kambing;

echo "<b>Perilaku Burung : </b><br/>";
echo $burung->Makan();
echo $burung->Bergerak();
echo $burung->Beranak();

echo "<br/>";
echo "<b>Perilaku Kambing : </b><br/>";
echo $kambing->Makan();
echo $kambing->Bergerak();
echo $kambing->Beranak();
?>

Jika program diatas dijalankan akan tampil :

Perilaku Burung : 
Burung makan biji-bijian
Burung bergerak dengan berjalan, terbang dan melompat
Burung beranak dengan bertelur

Perilaku Kambing :
Kambing makan rumput
Kambing bergerak dengan berjalan dan berlari
Kambing beranak dengan melahirkan

Dengan polymorphisn maka beberapa object yang sama dapat diimplementasikan melalui method yang baku dan terstruktur sehingga mempermudah saat proses pemrograman.

Polymorphism dengan class abstract

Selain melalui interface, konsep polymorphism juga bisa dilihat pada penerapan class abstract. Namun tentunya penerapan polymorphism disini tidak seluas dan sefleksibel ketika menggunakan Interface. Untuk lebih jelas bisa dilihat pada tulisan tentang Interface dan Class Abstrak.

Berikut ini contoh polymorphism pada Hewan tadi jika dibuat dengan class abstrak :

 <?php    
abstract class Hewan {
abstract public function Makan();
abstract public function Bergerak();
abstract public function Beranak();
}

class Burung extends Hewan {
public function Makan() {
return "Burung makan biji-bijian<br/>";
}

public function Bergerak() {
return "Burung bergerak dengan berjalan, terbang dan melompat<br/>";
}

public function Beranak() {
return "Burung beranak dengan bertelur<br/>";
}
}

class Kambing extends Hewan {
public function Makan() {
return "Kambing makan rumput<br/>";
}

public function Bergerak() {
return "Kambing bergerak dengan berjalan dan berlari<br/>";
}

public function Beranak() {
return "Kambing beranak dengan melahirkan<br/>";
}
}

$burung = new Burung;
$kambing = new Kambing;

echo "<b>Perilaku Burung : </b><br/>";
echo $burung->Makan();
echo $burung->Bergerak();
echo $burung->Beranak();

echo "<br/>";
echo "<b>Perilaku Kambing : </b><br/>";
echo $kambing->Makan();
echo $kambing->Bergerak();
echo $kambing->Beranak();
?>

Referensi :

  • //en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming
  • //jaskokoyn.com/2013/06/11/polymorphism/

Filed Under: PHP

Tutorial PHP OOP Part 24 : Menjalankan Method Chaining

8 Desember 2014 By Eko Purnomo

menggunakan method chainng

Dalam PHP OOP kita bisa menjalankan beberapa method secara berurutan dalam satu perintah. Fitur ini dinamakan Method Chaining atau Rangkaian Method. Dengan fitur ini kita bisa membuat suatu urutan proses menjadi lebih nyata melalui urutan proses yang tertata pada rangkaian method. Selain itu penulisan kode program juga lebih simpel dan jelas.

Kita bisa menjalankan method chaining pada object dengan cara menghubungkan antar method menggunakan tanda “->”. Namun ada syarat yang harus dipenuhi agar sebuah method biosa dipasangkan dalam rangkaian method chaining, yaitu yaita harus meletakkan keyword return $this dibagian paling bawah method, jika tidak akan menghasilkan error.

Perhatikan contoh penggunaan method chaining berikut ini :

 <?php    

class Pekerja
{
protected $tenaga=2000;
public $nama;

public function __construct($x)
{
$this->nama = $x;
echo "Tenaga ".$x." sekarang = ".$this->tenaga."<br/>";
}

public function Bekerja()
{
$this->tenaga -= 250;
echo $this->nama . " sedang bekerja. Tenaga sekarang: " . $this->tenaga . "<br/>";
return $this;
}

public function Istirahat()
{
$this->tenaga += 100;
echo $this->nama . " sedang beristirahat. Tenaga Sekarang: " . $this->tenaga . "<br/>";
return $this;
}
}

$bejo = new Pekerja( 'Bejo' );
$bejo->Bekerja()->Istirahat()->Bekerja(); //method chaining

?>

Jika dijalankan, maka program diats akan menghasilkan :

Tenaga Bejo sekarang = 2000
Bejo sedang bekerja. Tenaga sekarang: 1750
Bejo sedang beristirahat. Tenaga Sekarang: 1850
Bejo sedang bekerja. Tenaga sekarang: 1600

Penjelasan program :

Pada class Pekerja kita mempunyai method Bekerja() dan Istirahat(). Setiap bekerja method Bekerja() akan mengurangi tenaga sebesar 250 dan setiap istirahat, tenaga akan bertambah sebesar 100. Fungsi method chaining ditunjukkan pada perintah :

           $bejo->Bekerja()->Istirahat()->Bekerja(); 

Artinya kita menjalankan method Bekerja() dan method Istirahat() secara berantai dan dijalankan sekaligus pada satu perintah.

Note :
Yang perlu diperhatikan adalah penggunaan perintah return $this pada akhir method Bekerja() dan method Istirahat(). Ini yang memungkinkan sebuah method dipasangkan secara berantai.

Jika perintah return $this kita hilangkan akan muncul error berikut ini :

          Fatal error: Call to a member function Istirahat() on a non-object

Hal ini terjadi karena method Bekerja() tidak mengembalikan object yang bisa menjalankan method berikutnya.

Referensi :

  • //en.wikipedia.org/wiki/Method_chaining#PHP
  • //jaskokoyn.com/2013/06/11/chain-methods/

Filed Under: PHP

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

8 Desember 2014 By Eko Purnomo

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 :

  • //php.net/manual/en/language.oop5.late-static-bindings.php

Filed Under: PHP

Tutorial PHP OOP Part 22 : Menggunakan Type Hinting

6 Desember 2014 By Eko Purnomo

menggunakan-type-hint

Type hinting adalah sebuah cara untuk membatasi penggunaan parameter dalam sebuah method didalam class. Dengan type hinting kita dapat menentukan secara spesifik tipe data yang diterima oleh sebuah method. Type hinting hanya digunakan untuk mambatasi parameter berupa object, array dan interface. Type hinting tidak bisa dipakai untuk membatasi parameter dengan tipe integer, string, resource dan trait.

Penggunaan Type Hint

Untuk memahami penggunaan type hinting, silahkan perhatikan contoh berikut ini :

 <?php  

class Rumput {
public $kalori = 100;
}

$tokoEnergi1 = array (50,100,150,200);

$tokoEnergi2 = array (500,1000,1500,2000);

interface bonusEnergi {
const bonus=10000;
}

class Hewan
{
public $energi;

public function makanRumput( Rumput $Rumput )
{
$this->energi += $Rumput->kalori;
echo "Tambah Energi Makan Rumput Sebesar = ".$Rumput->kalori."<br/>";
}

public function beliEnergi( array $arrayName ,$level)
{
$this->energi += $arrayName[$level];
echo "Tambah beli Energi Sebesar = ".$arrayName[$level]."<br/>";
}

public function bonusEnergi( $interface )
{
$this->energi += $interface::bonus;
echo "Tambah Bonus Energi Sebesar = ".$interface::bonus."<br/>";
}

public function getEnergi()
{
return 'Total energi Sekarang: ' . $this->energi . '<br>';
}
}

$sapi = new Hewan;
$Rumput = new Rumput();
$sapi->energi=0;

echo "Energi awal Sapi=".$sapi->energi."<br/><br/>";

$sapi->makanRumput( $Rumput );
echo $sapi->getEnergi()."<br/>";

$sapi->beliEnergi($tokoEnergi1,3);
echo $sapi->getEnergi()."<br/>";

$sapi->beliEnergi($tokoEnergi2,2);
echo $sapi->getEnergi()."<br/>";

$sapi->bonusEnergi('bonusEnergi');
echo $sapi->getEnergi()."<br/>";

?>

Penjelasan Program

Pada contoh terdapat beberapa penggunaan type hint, yaitu :

  1. Type hint dengan tipe Object pada method makanRumput() menggunakan object Rumput
  2. Type hint  dengan tipe Array pada method beliEnergi() yang mengambil nilai dari array yang didefinisikan oleh variabel $arrayName.
  3. Type hint dengan tipe Interface pada method bonusEnergi() yang mengambil konstanta bonus dari interface bonusEnergi.

Alur program :

Misalnya kita akan membuat sebuah object Hewan pada karakter game dan memantau perkembangan energi melalui berbagai proses seperti makan rumput, beli energi dan bonus energi.
Persiapan untuk memperoleh energi :

  • Pertama kita membuat class Rumput dengan properti kalori diset sebesar 100.
  • Selanjutanya kita buat array tokoEnergi1 dengan isi 50,100,150,200 dan array tokoEnergi1 dengan isi 500,1000,1500,2000.
  • Yang ketiga kita buat Interface bonusEnergi dengan konstanta bonus sebesar 10000.

Pembuatan class Hewan dengan isi proses pertambahan energi :

  • Pertama kita membuat properti $energi.
  • Kemudian kita buat method makanRumput() untuk mengambil energi dari object Rumput yang diinstansisasi dari class Rumput lalu menambahkannya kedalam energi sekarang.
  • Kita buat juga method beliEnergi() untuk membeli energi dari array tokoEnergi yang berisi stok energi lalu menambahkannya kedalam energi sekarang.
  • Selanjutnya kita buat juga method bonusEnergi() untuk mengambil bonus energi dari interface yang berisi konstanta bonus energi lalu menambahkannya kedalam energi sekarang.
  • Yang terakhir kita buat method untuk menampilaknjumlah energi sekarang dengan method getEnergi().

Membuat visualisasi dari class Hewan :

  • Pertama kita buat object bernama sapi dari class Hewan.
  • Kita juga harus menginstantisasi object Rumput dari class Rumput agar bisa “dimakan” nantinya.
  • Setting nilai energi awal=0 dan tampilkan.
  • Kemudian melalui perintah { $sapi->makanRumput( $Rumput );  } kita menyuruh sapi untuk makan rumput lalu menampilkan energi sekarang dengan perintah { echo $sapi->getEnergi().”<br/>”;   }
  • Setelah itu kita perintah sapi untuk beli energi selama dua kali yaitu sebesar 200 di tokoEnergi1 dan 1500 di tokoEnergi2
  • Lalu kita tampilkan lagi energi sekarang dengan perintah { echo $sapi->getEnergi().”<br/>”;   }
  • Yang terakhir kita suruh sapi untuk mengambil bonus energi dari interface bonusEnergi melalui perintah { $sapi->bonusEnergi(‘bonusEnergi’);  }
  • Dan kita tampilkan lagi energi sekarang dengan perintah { echo $sapi->getEnergi().”<br/>”;   }

Berikut ini tampilan program saat dijalankan :

Energi awal Sapi=0

Tambah Energi Makan Rumput Sebesar = 100
Total energi Sekarang: 100

Tambah beli Energi Sebesar = 200
Total energi Sekarang: 300

Tambah beli Energi Sebesar = 1500
Total energi Sekarang: 1800

Tambah Bonus Energi Sebesar = 10000
Total energi Sekarang: 11800

Kesimpulan :

Dengan menggunakan type hinting, kita bisa membatasi nilai-nilai yang bisa masuk ke method yang kita buat. Kita juga memberikan akses sementara untuk penggunaan kelas di dalam kelas-kelas yang lain.

Referensi :

  • //php.net/manual/en/language.oop5.typehinting.php
  • //jaskokoyn.com/2013/06/11/type-hinting

Filed Under: PHP

Tutorial PHP OOP Part 21 : Perbandingan Object

6 Desember 2014 By Eko Purnomo

perbandingan object

Perbandingan antara dua buah object dapat dilakukan dengan operator perbandingan (==) seperti yang sering dipakai pada saat menggunakan logika IF. Dengan cara ini, kedua object diperbandingkan secara sederhana. Hasil dari operator (==) akan bernilai benar (TRUE) jika kedua object memiliki atribut dan nilai yang sama dan juga merupakan instantisasi dari class yang sama.

Selain operator perbandingan (==) pada PHP juga terdapt operator identik yaitu (===) atau tanda sama dengan yang ditulis tiga kali. Bila menggunakan operator identitas (===), variabel object disebut identik dan menghasilkan nilai benar (TRUE) jika dan hanya jika mereka mengacu pada instantisasi yang sama dari kelas yang sama.

Contoh penggunaan operator perbandingan (==) dan operator identik (===)

 <?php  
function bool2str($bool)
{
if ($bool === false) {
return 'SALAH';
} else {
return 'BENAR';
}
}

function Bandingkan(&$object1,$namaobject1, &$object2,$namaobject2)
{
echo $namaobject1 .' == '.$namaobject2.' -> '. bool2str($object1 == $object2) . "<br/>";
echo $namaobject1 .' != '.$namaobject2.' -> '. bool2str($object1 != $object2) . "<br/>";
echo $namaobject1 .' === '.$namaobject2.' -> '. bool2str($object1 === $object2) . "<br/>";
echo $namaobject1 .' !== '.$namaobject2.' -> '. bool2str($object1 !== $object2) . "<br/>";
}

class Class1
{
public $contoh;
function Test1($contoh = true) {
$this->contoh = $contoh;
}
}

class Class2
{
public $contoh;
function Test2($contoh = true) {
$this->contoh = $contoh;
}
}

$object1 = new Class1();
$object2 = new Class1();
$object3 = $object1;
$object4 = new Class2();

echo "<h1>Kriteria perbandingan :</h1>
".htmlspecialchars("$")."object1 = new Class1();<br/>
".htmlspecialchars("$")."object2 = new Class1();<br/>
".htmlspecialchars("$")."object3 = ".htmlspecialchars("$")."object1;<br/>
".htmlspecialchars("$")."object4 = new Class2();<br/>
<br/>
";

echo "<h1>Hasil Perbandingan :</h1>";

echo "<b>Dua instantisasi dari class yang sama :</b><br/>";
Bandingkan($object1,'$object1', $object2,'$object2');

echo "<br/><b>Dua reference dari instantisasi yang sama :</b><br/>";
Bandingkan($object1,'$object1', $object3,'$object3');

echo "<br/><b>Instantisasi dari dua class berbeda :</b><br/>";
Bandingkan($object1,'$object1', $object4,'$object4');
?>

Jika program diatas dijalankan akan tampil hasil perbandingan seperti ini :

Kriteria perbandingan :

$object1 = new Class1();
$object2 = new Class1();
$object3 = $object1;
$object4 = new Class2();

Hasil Perbandingan :

Dua instantisasi dari class yang sama :
$object1 == $object2 -> BENAR
$object1 != $object2 -> SALAH
$object1 === $object2 -> SALAH
$object1 !== $object2 -> BENAR

Dua reference dari instantisasi yang sama :
$object1 == $object3 -> BENAR
$object1 != $object3 -> SALAH
$object1 === $object3 -> BENAR
$object1 !== $object3 -> SALAH

Instantisasi dari dua class berbeda :
$object1 == $object4 -> SALAH
$object1 != $object4 -> BENAR
$object1 === $object4 -> SALAH
$object1 !== $object4 -> BENAR

Penjelasan program :

Dari percobaan diatas dapat diperoleh beberapa kondisi, yaitu:

  1. Object1 dan Object2 merupakan object yang di instantisasi dari class yang sama, maka ketika dibandingkan dengan operator (==) menghasilkan “BENAR” dan ketika dibandingkan dengan operator (===) menghasilkan “SALAH”.
  2. Object1 dan Object3 merupakan object yang direferen dari instantisasi dari class yang sama, maka ketika dibandingkan dengan operator (==) menghasilkan “BENAR” dan ketika dibandingkan dengan operator (===) menghasilkan “BENAR”.
  3. Object1 dan Object4 merupakan object yang diinstantisasi dari class yang berbeda, maka ketika dibandingkan dengan operator (==) menghasilkan “SALAH” dan ketika dibandingkan dengan operator (===) menghasilkan “SALAH”.

Referensi :

  • //php.net/manual/en/language.oop5.object-comparison.php

Filed Under: PHP

Tutorial PHP OOP Part 20 : Pengertian Object Cloning

5 Desember 2014 By Eko Purnomo

pengertian object cloning

Object cloning adalah membuat object baru yang sama dengan object lama. Sekilas ini mirip dengan proses copy namun berbeda dalam penerapannya. Seperti kita ketahui bahwa sebuah object bukanlan sebuah variabel dengan value tetapi hanya sebuah reference yang mengacu pada properti dan method di dalam class.

Berikut ini contoh perbedaan copy pada object dan variabel :

Contoh copy pada variabel :

memberi nilai 5 pada variabel a
a=5;

mengkopi nilai variabel a ke variabel b
b=a;

sekarang variabel a bernilai 5 dan variabel b bernilai 5

mengganti nilai variabel a dengan 4
a=4;

sekarang variabel a bernilai 4 dan variabel b tetap bernilai 5

Hal ini tidak berlaku pada object, perhatikan contoh berikut ini :

 <?php  
class Rumus {
var $panjang;
var $lebar;

function __construct($x,$y) {
$this->panjang =$x;
$this->lebar =$y;
}

function luas() {
return $this->panjang * $this->lebar;
}
}

$rumus1= new Rumus(6,7);
$rumus2 = $rumus1;

echo "Hasil sebelum properti panjang diganti: <br/>";
echo "Luas dari rumus1 = ".$rumus1->luas()."<br/>";
echo "Luas dari rumus2 = ".$rumus2->luas()."<br/><br/>";

//nilai properti panjang pada rumus2 diganti jadi 5
$rumus2->panjang=5;

echo "Hasil setelah properti panjang pada rumus2 diganti 5: <br/>";
echo "Luas dari rumus1 = ".$rumus1->luas()."<br/>";
echo "Luas dari rumus2 = ".$rumus2->luas()."<br/>";
?>

Jika program diatas dijalankan akan tampil seperti ini :

Hasil sebelum properti panjang diganti: 
Luas dari rumus1 = 42
Luas dari rumus2 = 42

Hasil setelah properti panjang pada rumus2 diganti 5:
Luas dari rumus1 = 35
Luas dari rumus2 = 35

Terlihat bahwa hasil perhitungan method luas() pada rumus1 dan rumus2 setelah properti diganti adalah sama, meskipun kita hanya mengganti properti panjang rumus2. Hal ini terjadi karena ketika kita mengganti properti pada rumus2 maka properti panjang pada object rumus1 juga ikut berubah.

Ini membuktikan bahwa object hanya sebatas reference saja. Jadi ketika yang direferen berubah maka yang hasil referensi juga ikut berubah karena hakikatnya hanya ada satu object saja.

Membuat cloning object

Dengan meng-kloning sebuah object kita akan mempunyai object baru yang sama dengan object lama namun mempunyai ruang serdiri dalam memori. Jadi ketika properti pada object lama diganti tidak akan mempengaruhi properti pada object baru hasil kloningan.

Untuk membuat object kita menggunakan keyword “clone”.
Perhatikan contoh diatas setelah kita menggunakan clone pada rumus1 dan rumus2 berikut ini :

 <?php  
class Rumus {
var $panjang;
var $lebar;

function __construct($x,$y) {
$this->panjang =$x;
$this->lebar =$y;
}

function luas() {
return $this->panjang * $this->lebar;
}
}

$rumus1= new Rumus(6,7);
$rumus2 = clone $rumus1;

echo "Hasil sebelum properti panjang diganti: <br/>";
echo "Luas dari rumus1 = ".$rumus1->luas()."<br/>";
echo "Luas dari rumus2 = ".$rumus2->luas()."<br/><br/>";

//nilai properti panjang pada rumus diganti jadi 5
$rumus2->panjang=5;

echo "Hasil setelah properti panjang pada rumus2 diganti 5: <br/>";
echo "Luas dari rumus1 = ".$rumus1->luas()."<br/>";
echo "Luas dari rumus2 = ".$rumus2->luas()."<br/>";
?>

Jika program diatas dijalankan akan tampil seperti ini :

Hasil sebelum properti panjang diganti: 
Luas dari rumus1 = 42
Luas dari rumus2 = 42

Hasil setelah properti panjang pada rumus2 diganti 5:
Luas dari rumus1 = 42
Luas dari rumus2 = 35

Hasil yang diperoleh dari rumus1 dan rumus2 setelah mengganti properti terlihat berbeda. Hal ini karena rumus2 merupakan object baru hasil dari cloning rumus1. Dengan demikian object rumus2 mempunya memori untuk menyimpan properti dan methodnya sendiri.

Mengapa menggunakan cloning, mengapa kita tidak membuat instantisasi saja lagi untuk object baru ?

Jika kita berkata tentang pemrograman berorientasi object tentunya tidak hanya PHP saja. Penggunaan cloning pada PHP OOP ini lebih kearah penyeragaman bahasa terharap  bahasa pemrograman berorientasi object lainnya.

Selain itu membuat instantisasi baru akan mengharuskan kita mendefinisikan semua properti pada konstruktor. Hal ini kurang cocok saat kita melakukan pemrograman secara tim, dimana teman kita perlu mengakses object yang kita buat namun dia ingin mengganti salah satu properti saja.

Dengan cloning object maka dia cukup mengambil object yang kita buat lalu mengganti properti yang diinginkan tanpa harus instantisasi semua properti.

Penggunaan method __clone() pada proses cloning

PHP memberikan sebuah magic method bernama __clone untuk menangani hal-hal yang berkaitan dengan proses cloning. Method ini akan otomatis diakses setelah proses cloning object selesai.

Contoh penggunaan method __clone dengan memodifikasi contoh program diatas :

 <?php  
class Rumus {
var $panjang;
var $lebar;
function __construct($x,$y) {
$this->panjang =$x;
$this->lebar =$y;
}
function luas() {
return $this->panjang * $this->lebar;
}
function __clone() {
$this->panjang++;
}
}
$rumus1= new Rumus(6,7);
$rumus2 = clone $rumus1;
echo "Hasil rumus1 dan rumus2 setelah cloning: <br/>";
echo "Luas dari rumus1 = ".$rumus1->luas()."<br/>";
echo "Luas dari rumus2 = ".$rumus2->luas()."<br/>";
?>

Jika program diatas dijalankan akan tampil seperti ini :

Hasil rumus1 dan rumus2 setelah cloning: 
Luas dari rumus1 = 42
Luas dari rumus2 = 49

Tampak hasil perhitungan method luas() pada rumus1 dan rumus2 berbeda. Method luas() pada rumus1 menghasilkan 42 sedangkan method luas() pada rumus2 menghasilkan 49.

Hal ini karena setelah proses cloning rumus1 menjadi rumus2 program otomatis menjalankan method __clone yang berisi perintah menambah 1 pada properti panjang, yaitu : $this->panjang++.

Referensi :

  • //php.net/manual/en/language.oop5.cloning.php
  • //arthur.purnama.de/2008/12/object-cloning-di-php-5.html

Filed Under: PHP

  • « Previous Page
  • 1
  • 2
  • 3
  • 4
  • …
  • 17
  • Next Page »

Kategori

  • Android
  • Blogging
  • CSS
  • Desain
  • Elektronika
  • HTML
  • Internet
  • Javascript
  • Komputer
  • Mikrokontroler
  • PHP
  • Website

Pos-pos Terbaru

  • Rangkaian Adaptor 12 Volt 3 Ampere
  • 10 Aplikasi Transportasi Online Terbaru 2018
  • 3 Cara Screenshot di Laptop Windows
  • Rangkaian Adaptor 12V 35Ampere
  • Komunitas Desainer Kampung Jepara
  • Solder Yang Bagus dan Berkualitas
  • Cara Melewatkan Parameter ke dalam Fungsi pada Bahasa C
  • Parameter Dalam Bahasa C: Formal dan Aktual
  • Prototipe Fungsi dalam Bahasa C
  • Cara Menggunakan Fungsi dalam Bahasa C
  • Home
  • Privacy
  • Disclaimer
  • Kontak

Copyright © 2024 · Nulis-ilmu.com