Melanjutkan tutorial Belajar Object Oriented Programming (OOP) PHP, kali ini kita akan membahas tentang Pengertian Constructor dan Destructor dalam Pemrograman Objek, khususnya OOP PHP.
Pengertian Constructor dalam OOP
Constructor adalah method khusus yang akan dijalankan secara otomatis pada saat sebuah objek dibuat (instansiasi), yakni ketika perintah "new" dijalankan.
Constructor biasa digunakan untuk membuat proses awal dalam mempersiapkan objek, seperti memberi nilai awal kepada property, memanggil method internal dan beberapa proses lain yang digunakan untuk mempersiapkan objek.
Dalam PHP, constructor dibuat menggunakan method __construct().
Pengertian Destructor dalam OOP
Destructor adalah method khusus yang dijalankan secara otomatis pada saat sebuah objek dihapus. Di dalam PHP, seluruh objek sebanarnya sudah otomatis dihapus ketika halaman PHP selesai diproses. Tetapi kita juga dapat menghapus objek secara manual.
Destructor biasanya dipakai untuk membersihkan beberapa variabel, atau menjalankan proses tertentu sebelum objek dihapus.
Dalam PHP, destructor dibuat menggunakan method __destruct().
Cara Penggunaan Destructor dan Constructor dalam PHP
Berikut adalah contoh penggunaan constructor dan destructor dalam kode program PHP:
<?php // buat class laptop class laptop { Â Â Â private $pemilik = "Andi"; Â Â private $merk = "Lenovo"; Â Â Â Â public function __construct(){ Â Â Â Â echo "Ini berasal dari Constructor Laptop"; Â Â } Â Â Â public function hidupkan_laptop(){ Â Â Â Â return "Hidupkan Laptop $this->merk punya $this->pemilik"; Â Â Â } Â Â public function __destruct(){ Â Â Â Â echo "Ini berasal dari Destructor Laptop"; Â Â } } Â // buat objek dari class laptop (instansiasi) $laptop_andi= new laptop(); Â echo "<br />"; echo $laptop_andi->hidupkan_laptop(); echo "<br />"; ?>
Dalam contoh ini saya membuat class laptop dengan 3 method:
- Method __construct() merupakan constructor dari class laptop. Method ini akan dipanggil secara otomatis ketika class laptop di instansiasi.
- Method hidupkan_laptop() merupakan method biasa yang akan menampilkan hasil string. Untuk menggunakan method ini, kita memanggilnya dari objek.
- Method ketiga adalah __destruct() yang merupakan destructor dari class laptop. Method ini akan dipanggil saat objek dihapus.
Setelah pendefinisian class, saya membuat objek $laptop_andi, dan memanggil method hidupkan_laptop(). Berikut adalah hasil yang didapat:
Ini berasal dari Constructor Laptop Hidupkan Laptop Lenovo punya Andi Ini berasal dari destructor Laptop
Seperti yang terlihat, method __construct() dan __destruct() secara otomatis dipanggil saat objek dibuat dan saat objek dihapus. Untuk mencoba menghapus objek $laptop_andi secara manual, kita bisa menggunakan fungsi unset() sebagai berikut:
<?php // buat class laptop class laptop { Â Â Â private $pemilik = "Andi"; Â Â private $merk = "Lenovo"; Â Â Â Â public function __construct(){ Â Â Â Â echo "Ini berasal dari Constructor Laptop"; Â Â } Â Â Â public function hidupkan_laptop(){ Â Â Â Â return "Hidupkan Laptop $this->merk punya $this->pemilik"; Â Â Â } Â Â public function __destruct(){ Â Â Â Â echo "Ini berasal dari Destructor Laptop"; Â Â } } Â // buat objek dari class laptop (instansiasi) $laptop_andi= new laptop(); Â echo "<br />"; echo $laptop_andi->hidupkan_laptop(); echo "<br />"; Â // hapus objek $laptop_andi unset($laptop_andi); Â echo "<br />"; echo "Objek Telah Dihancurkan"; ?>
Dengan menjalankan kode diatas, berikut adalah hasil yang didapat:
Ini berasal dari Constructor Laptop Hidupkan Laptop Lenovo punya Andi Ini berasal dari Destructor Laptop Objek Telah Dihancurkan
Setelah memanggil method $laptop_andi->hidupkan_laptop(), saya menghapus objek $laptop_andi secara manual menggunakan fungsi unset($laptop_andi).
Untuk membuktikan bahwa destructor $laptop_andi sudah dijalankan, saya menambahkan perintah echo "Objek Telah Dihancurkan" diakhir kode program. Sehingga kita bisa lihat bahwa destructor objek $laptop andi di jalankan sebelum dihapus otomatis oleh PHP.
Silahkan anda coba hapus perintah unset($laptop_andi), maka string "Objek Telah Dihancurkan" akan tampil sebelum destructor objek $laptop_andi.
Sebagai contoh terakhir dalam tutorial kali ini, saya akan membuat contoh constructor yang sering digunakan untuk membuat objek dengan nilai awal. Konsep ini sering digunakan dalam pemrograman objek. Berikut adalah contoh penggunaannya:
<?php // buat class laptop class laptop {    private $pemilik;   private $merk;    // constructor sebagai pembuat nilai awal   public function __construct($pemilik, $merk) {     $this->pemilik = $pemilik;     $this->merk = $merk;   }    public function hidupkan_laptop() {     return "Hidupkan Laptop $this->merk punya $this->pemilik";   } }  // buat objek dari class laptop (instansiasi) $laptop_andi= new laptop("Andi", "Lenovo");  echo $laptop_andi->hidupkan_laptop(); echo "<br />";  $laptop_anto= new laptop("Anto", "Acer");  echo $laptop_anto->hidupkan_laptop(); ?>
Pada kode diatas saya menggunakan constructor sebagai pembuat nilai awal objek. Method constructor menerima 2 buah argumen yang kemudian disimpan ke dalam property internal objek.
Berikut adalah hasil yang didapat dari kode program di atas:
Hidupkan Laptop Lenovo punya Andi Hidupkan Laptop Acer punya Anto
Sebagai tambahan, di dalam PHP constructor dan destructor harus memiliki hak akses public. Jika kita mengubah hak akses constructor atau destructor menjadi protected atau private, PHP akan mengeluarkan pesan error berikut:
Fatal error: Call to private laptop::__construct() from invalid context
Dalam tutorial kali ini kita telah membahas tentang pengertian constructor dan destructor dalam Pemrograman objek PHP. Kemudian juga melihat contoh pembuatan class dan objek menggunakan constructor dan destructor.
Dalam tutorial belajar OOP PHP berikutnya akan dibahas konsep penting lain, yakni penurunan/pewarisan (inheritance) dalam Pemrograman objek.
Ass wr.wb
Mau tanya om, misalkan kita menaruh parametar pada fungsi<b>__construct</b> dan <b>__desctruct</b>
public function __construct($pemilik, $merk)
seperti contoh diatas, nilai parameter tsb diisi melalui class ya, atau ada cara lain ?
maaf kalo kurang jelas pertanyaannya om, bru blajar :D
Sy msh kurang paham dgn fungsi construct dan destruct, dan pertanyaannya kenapa objek harus dihapus?
Constructor cukup sering dipakai gan, dan memang sangat berguna untuk proses inisialisasi objek.
Prinsipnya sama seperti kita membuat variabel dan langsung memberikan nilai awal. Sehingga kita tidak perlu 2 kali membuat proses, yakni membuat variabel dan mengisi nilai awalnya.
Daripada memproses:
$laptop_andi= new laptop();
$laptop_andi->pemilik = "Andi";
$laptop_andi->merk = "Lenovo";
akan lebih bagus jika langsung di tempatkan di constructor:
$laptop_andi= new laptop("Andi", "Lenovo");
Kalau untuk destructor, memang relatif jarang digunakan. Destructor biasanya dipakai pada bahasa pemrograman yang harus secara manual menghapus objek. Karena jika tidak dihapus, objek tersebut masih terdapat di memory. Akibatnya memory akan penuh oleh objek2 program yang sebenarnya tidak diperlukan lagi. Istilahnya, terdapat 'memory leaking'. Umumnya ini ada di dalam bahasa pemrograman 'lawas' seperti C atau C++ yang compilernya mungkin masih jadul.
Di dalam PHP, setiap objek otomatis akan dihapus dari memory begitu kode PHP selesai dijalankan. Jadi kita tidak perlu menghapus objek secara manual.
jika pada saat pemanggilan objek.
$laptop = new laptop('andi','asus');
Apakah bisa diubah menjadi ,
new laptop($_POST['pemilik'], $_POST['merek']);
Yup betul gan, bisa dibuat seperti itu. Jadi nilai dari form, langsung menjadi nilai awal untuk constructor laptop.
Jd intinya construc itu untuk ngisi proprty atau variabel di dalam class biar nggak banyak ngetik nama objek, ,
Hehe, bisa dibilang seperti itu mas.
Tapi lebih tepatnya seperti yang saya bahas disini. Construktor digunakan untuk 'mengisi' objek ketika pertama kali dibuat. Misalnya kita punya class "mobil", dengan menambahkan construktor, ketika objek "mobil andi" dibuat, mobil itu sudah langsung berwarna merah, memiliki knalpot racing, dan pakai kaca file. Ini semua di set dari method construktor.
Maaf sebelumnya mas Andre, teks isset() diatas yg dimaksud mungkin unset()?
Ada di teks bagian "Untuk mencoba menghapus objek $laptop_andi secara manual, kita bisa menggunakan fungsi isset() sebagai berikut…"
Maaf klo salah koreksi,. Hehe ")
Oh iya, ada salah ketik disitu, makasih koreksinya, segera diperbaiki :)
mkasih mas jadi paham (y)
Siip, semoga bisa bermanfaat :)
Mas sya mau nanya tolong jelasin arti dari overload construktor dong mas oh iya sekalian contoh nya mas. Mklum pemula
Overload Constructor ini untuk bahasa Java mungkin yah? soalnya di PHP tidak dikenal overload constructor.
Kalau dijelaskan di komentar ini rasanya terlalu panjang, singkatnya Overload Constructor adalah membuat constructor dengan nama yang sama tapi punya jumlah argumen yang berbeda2.
Sehingga nanti bisa dipanggil seperti ini:
$laptop_andi= new laptop();
$laptop_joko= new laptop($merk);
$laptop_rina= new laptop($merk,$spec);
Isi dari object yang dibuat, akan berbeda2 tergantung jumlah argumen. Tp tentu saja kita harus membuat method untuk ketiga jenis constructor ini (di dalam class laptop).
Tp sekali lagi, di PHP tidak mendukung yang seperti ini, tapi kalau di Java bisa.
setelah saya copas code nya .. tapi kok hasilnya gini ya
"Hidupkan Laptop Lenovo punya Andi
Ini berasal dari Constructor Laptophidupkan laptopeIni berasal dari Destructor LaptopIni berasal dari Destructor LaptopIni berasal dari Destructor Laptop"
kenapa ada yang di ulang ya !!
Saya sudah test ulang, dan tidak ada masalah… mungkin agan copynya bukan ke file yang baru, jadi ada kode dari kode program sebelumnya yang terikut.
maaf kang andre, saya juga mengalami hal yang sama seperti yang terjadi pada kang Angga diatas, saya juga sudah buat file yang baru, hasilnya tetep sama.
tapi ketika saya tambahkan
unset($laptop_andi);
hasilnya justru jadi sesuai.
saya lakukan tes pada contoh kedua, saya copy, hasilnya sesuai, tapi ketika saya hilangkan "unset" nya, destruct malah muncul diawal
seperti ini
Ini berasal dari Destructor LaptopIni berasal dari Constructor Laptop
Hidupkan Laptop Lenovo punya Andi
Objek Telah Dihancurkan
Ini maksudnya contoh kode program yang kedua ya? Boleh copy paste kode programnya kesini? Soalnya di contoh kedua tutorial ini memang ada perintah unset($laptop_andi) di baris 29.
Berikut hasilnya dari compiler PHP Online: http://rextester.com/IRBTH77891
class laptop {
private $pemilik;
private $merk;
// constructor sebagai pembuat nilai awal
public function __construct($pemilik, $merk) {
$this->pemilik = $pemilik;
$this->merk = $merk;
}
…..
Mas, mau nanya.
1. Apakah argumen yang ada pada method construct itu harus selalu dipanggil melalui property internal objek seperti contoh yang diatas?
2. Trus jika level property class bersifat public, gimana cara pemanggilan property internalnya didalam metod construct ? apakah $this nya dihilangkan lalu kemudian diganti menjadi seperti ini ?
……
public $pemilik;
public function __construct ($pemilik) {
$pemilik = $pemilik;
}
…….
3. Terakhir Jika property class tidak didefinisikan, gimana cara memberikan nilai argumen didalam method construct ?
class laptop {
public function __construct($pemilik, $merk) {
??????
}
}
Terima kasih mas
Nanya min.. kalo isi/nilai variabelnya dpt dr inputan user itu caranya gimana? apa perlu nambahin konstruktor dengan parameter? atau konstruktornya di kosongin?
Kalau dari inputan user, harus diproses menggunakan form. Setelah itu tinggal ditampung kedalam variabel dan dipindahkan ke bagian lain (tergantung kebutuhan).
Min mau nanya, Kenapa Parameter di objek dapat di gunakan d contruct tapi tidak bisa di method lainnya
Bisa kok, parameter bisa dipakai di setiap function, termasuk method biasa.
Mas Andre , saat property class dhapus kenapa metode h_laptop masih bisa d return-nya ?
class laptop {
public fn __construct($p)
{
$this -> pemilik = $p;
}
public fn h_laptop()
{
return"Hidup ". $this->pemilik:
}
}
$laptop_a = new laptop("Andi");
echo $laptop_a -> h_laptop();
Penjelasan pastinya saya juga kurang tau nih, tapi mungkin property $pemiliki langsung tercipta begitu ketemu perintah $this -> pemilik = $p;
Analoginya bisa seperti ini:
class laptop {
}
$laptop_a = new laptop();
$laptop_a->milik = "Andi";
echo $laptop_a -> milik; // Andi
Disini property $milik digenerate langsung di luar class.
wahh makasih gan saya jadi tambah faham nih
Methode __construct ini dia tidak bisa menerima lebih dari 2 variable ya?
Setahu saya tidak ada batasan jumlah variabel yang bisa diterima. Selama bisa ditampung oleh jumlah parameter yang sama.
Misal jika ingin 3 variabel, maka bisa ditulis dengan:
public function __construct ($a, $b, $c) {
…
}
Halo gan, berarti construct ini fungsinya sama aja kaya kita kasih value ke property langsung ya, jadi mempermudah untuk mendapat value tanpa harus menulis manual kan?
Umumnya memang dipakai untuk itu, tapi constructor ini tidak harus berisi kode program untuk mengisi value ke property, bisa saja diisi dengan perintah2 lain.
Saya awalnya hanya ngulik2 function terus, ga taunya ini lebih praktis, ternyata memaksa belajar ke situs bule itu gak baik, belajar ke w3schools/php.net gak paham paham akhirnya saya skip deh belajar OOP, saya kira hasilnya semakin pro kalo belajar ke w3schools/php.net, tapi kalau pemahaman inggrisnya jelek percuma wkwk, makasih gan bermanfaat banget
Hehe… setiap web tutorial memang ada plus-minus masing2. Biasanya kita harus cari2 sumber mana yang dirasa pas. Semoga lancar proses belajarnya..
Constructor ini saya kira seperti function yang error ketika di panggil tanpa argumen akan menghasilkan error `Missing argument `, saya sudah set ke
class a{
public function __construct ($a, $b, $c) {
…
}
}
$a=new a();
Class tidak error, metode seperti apa yang bisa seperti function ($a,$b){} yang ketika di panggil tanpa argumen akan error, trims
Menjalankannya pakai apa ya? harusnya kode tersebut memang akan error:
PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function a::__construct()
Jika tidak tampil error, kemungkinan error reporting di web servernya tidak aktif. Bisa coba test di XAMPP versi terbaru.