Tutorial OOP Dasar Pada PHP

Constructor dan Destructor

Materi ini memiliki 1 buah lampiran. Namun Anda tidak dapat mengakses lampiran karena belum terdaftar di kursus ini. Klik disini untuk mendaftar.

Pada video ini kita akan membicarakan mengenai Constructor dan Destructor, yaitu function yang akan dijalankan pada saat objek dibuat dan dihapus. Pada saat objek dibuat, maka kita menjalankan constructor. Sedangkan pada saat objek dihapus, kita menjalankan destructor.

Kita bahas Constructor terlebih dahulu. Khusus pada bahasa pemograman PHP, nama constructor harus __construct. Hal ini berbeda dari bahasa pemograman lain ya. Kalau di bahasa lain biasanya constructor menggunakan nama yang sama dengan nama kelasnya. Namun di PHP harus menggunakan nama __construct. Ingat di bagian depannya harus ada 2 buah simbol underscore.

Constructor boleh memiliki parameter. Namun nantinya pada saat kita membuat objek, kita harus memberikan argument yang jumlahnya sesuai dengan parameternya. Jadi bisa kita bilang kalau aturannya mirip dengan aturan pembuatan function ya.

Apa kegunaan dari constructor? Biasanya constructor ini digunakan untuk inisialisasi. Kalau misalkan objek kita memiliki property, kita bisa menggunakan constructor untuk memberikan nilai awal pada property. Kalau misalkan objek kita menggunakan resource, maka kita bisa menggunakan construtor untuk melakukan inisialisasi terhadap resource tersebut. Misalkan kalau kita hendak menggunakan database, maka kita bisa membuka koneksi ke database. Kalau misalkan kita hendak menggunakan file, maka kita bisa membuka file tersebut.

Agar lebih jelas kita langsung coba praktek ya. Kita buka kembali source code sebelumnya. Source codenya sudah saya modifikasi sedikit agar tidak menggunakan file view.php dan library.php. Kita buka ke file Student.php. Disini ada deklarasi kelas Student dan kita akan tambahkan constructor. Di dalam deklarasi kelas, biasanya pada bagian paling atas kita menuliskan dahulu property-property milik kelas. Setelah itu dibawahnya baru kita tuliskan method-method milik kelas. Method yang paling pertama dimiliki oleh kelas adalah constructor-nya. Jadi di sebelum method showInformation, kita tambahkan function __construct(). Untuk sementara kita tuliskan dahulu isinya adalah echo "Objek Student dibuat\n".

Kita jalankan. Kita buka lagi main.php untuk melihat alur jalannya program dan kita bandingkan ke hasilnya ya.

Perhatikan pada source. Pertama kita buat objek Student untuk $budi dahulu. Maka hasil di paling atasnya adalah "Objek Student dibuat". Ini adalah hasil dari kode new Student(). Kalau kita perhatikan sintaks untuk pembuatan object, bagian paling belakangnya harus ada tanda kurung seperti pada saat kita memanggil function ya. Hal ini disebabkan karena pada saat kita membuat object, kita menjalankan function constructor-nya. Sebagai hasilnya kita mendapatkan tulisan "Objek Student dibuat". Setelah itu kita memanggil method showInformation dan kita mendapatkan hasil "Budi belajar di 2A".

Pada bagian selanjutnya kita membuat lagi object Student untuk $andi. Maka kita mendapatkan tulisan lagi "Object Student dibuat", namun kali ini untuk $andi ya. Setelah itu kita panggil method showInformation dan kita mendapatkan tulisan "Andi belajar di 1C".

Pada bagian selanjutnya kita membuat object Teacher. Namun berhubung kita belum membuat constructor pada kelas Teacher, maka tidak ada tulisan apa-apa. Namun pada saat kita memanggil method showInformation, kita mendapatkan tulisan "Skysen mengajar di 1C".

Biasanya constructor digunakan untuk inisialisasi. Apabila objek kita membutuhkan file, maka kita bisa menaruh kode untuk membuka file pada constructor. Apabila objek membutuhkan database, maka kita bisa membuka koneksi ke database. Atau yang paling umum digunakan adalah untuk memberikan nilai awal property.

Misalkan kita lihat lagi ke kode pembuatan objek Student ya. Disini kita memanggil new Student tanpa argument. Setelah itu kita perlu menambahkan 2 baris kode lagi untuk mengisi nilai dari property name dan classroom. Kode disini bisa kita sederhanakan dengan menambahkan parameter $name dan $classroom pada constructor, jadi kita bisa langsung mengisi nilainya pada saat membuat objek.

Caranya? Kita bisa kembali ke file Student.php. Pada constructor-nya kita tambahkan 2 parameter, yaitu $name dan $classroom. Lalu isi constructor bisa kita tambahkan kode untuk menyimpan nilai parameter ke dalam property. Ingat ya, untuk mengakses property kita mesti menggunakan $this.

$this->name = $name;
$this->classroom = $classroom;

Kita kembali ke file main.php. Sekarang pada saat kita membuat objek $budi, kita bisa memasukkan argument pertama namanya yaitu 'Budi', dan argument kedua adalah classroom yaitu '2A'. Setelah itu kita bisa menghapus dua baris kode dibawahnya. Kodenya menjadi lebih sederhana ya, dibandingkan dengan kode untuk membuat objek 'Andi'.

Kita coba jalankan. Kita mendapatkan fatal error ya. Karena sekarang pada saat hendak membuat objek, kita harus mengirimkan 2 buah argument. Sedangkan kode kita pada saat membuat objek 'Andi' tidak mengirimkan argument sama sekali. Jadi teman-teman bisa perhatikan ya. Pada pesan kesalahan fatal error, PHP menyebutkan nomor baris kesalahannya. Kalau kita lihat ke kode pada baris tersebut adalah kode pembuatan objek 'Andi'. Pesan kesalahannya adalah jumlah argument-nya terlalu sedikit, yaitu 0 sedangkan yang diharapkan adalah 2.

Namun kalau kita lihat ke atasnya. Kita bisa melihat bahwa kode dari objek $budi telah berhasil dijalankan. Kita mendapatkan tulisan 'Budi belajar di 2A'. Jadi walaupun kodenya lebih singkat 2 baris, namun bisa berjalan dengan benar.

Fitur-fitur yang bisa kita gunakan pada function, biasanya bisa digunakan juga pada constructor ya. Misalkan fitur Type Declaration dan Default Argument Values. Sebagai contoh, kita buka kembali file Student.php. Lalu parameter $name kita tambahkan tipe data string dan nilai default ''. Begitu juga dengan parameter $classroom.

Kalau kita jalankan, maka sekarang sudah tidak ada fatal error. Dan kode untuk membuat objek seperti $budi maupun $andi sudah bisa berjalan dengan benar. Jadi kita bisa membuat objek sambil mengirimkan nama dan kelasnya langsung sebagai argument. Atau kita membuat objek tanpa argument, setelah itu baru mengisi property nama dan kelasnya.

Yang perlu diperhatikan disini adalah constructor tidak boleh mengembalikan sesuatu. Karena construtor secara default mengembalikan objek yang berhasil dibuat. Jadi kalau pada deklarasi __construct kita tambahkan return type misalkan kita tambahkan void. Maka yang terjadi adalah fatal error. Jadi untuk constructor, tidak boleh ada return type.

Kita lanjutkan materi. Kalau tadi ada constructor yang dijalankan pada saat objek dibuat, maka sekarang ada yang namanya destructor yang dijalankan pada saat objek dihapus. Khusus untuk bahasa pemograman PHP, nama destructor harus __destruct. Berbeda dari constructor yang boleh menggunakan parameter, destructor tidak boleh memiliki parameter. Destructor biasanya digunakan untuk menutup penggunaan resource. Misalkan kalau tadinya kita menggunakan file, maka pada destructor kita bisa menutup file-nya. Begitu juga dengan koneksi database.

Pada bahasa pemograman yang memory-nya harus ditangani secara manual oleh programmer, seperti bahasa pemograman C++, destructor memiliki fungsi yang sangat penting. Karena disini programmer harus menuliskan kode untuk membebaskan semua memory yang dipakai oleh objek. Kalau ada memory yang lupa dibebaskan, maka sistem operasi menganggap bahwa bagian memory tersebut selalu terpakai sepanjang sistem belum di-restart. Bugs seperti ini dikenal dengan nama memory leak. Memory leak menyebabkan memory yang masih bisa dipakai semakin lama semakin sedikit, hingga akhirnya sistem lumpuh karena kehabisan memory.

Untungnya bahasa pemograman yang lebih baru, termasuk PHP, sudah menggunakan sistem Garbage Collector. Jadi penggunaan memory diatur secara otomatis oleh PHP. Untuk bagian memory yang sudah tidak ditunjuk oleh variable apa pun, secara otomatis dihapus oleh PHP, sehingga sistem kita terbebas dari memory leak.

Kita kembali ke kode ya. Kita tambahkan destructor pada kelas Student. Destructor biasanya ditulis dibawah constructor. Kita buat function yang namanya __destruct. Function ini tidak boleh menggunakan parameter dan return type.

Berhubung PHP sudah menggunakan Garbage Collector, jadi destructor pada PHP biasanya hanya digunakan untuk menutup penggunaan resource, misalkan untuk menutup file atau menutup koneksi database. Namun berhubung kita belum belajar file maupun database, maka pada contoh disini kita hanya menuliskan kalimat saja, agar kita tau kapan kode destructor dijalankan. Misalkan kita echo "Objek {$this->name} dihapus\n".

Kita coba jalankan. Dan kita bisa lihat tulisan objek Budi dan objek Andi dihapus pada bagian akhir script. Jadi pada saat script kita berakhir, PHP secara otomatis menghapus bagian-bagian memory yang digunakan oleh script tersebut.

Apabila diperlukan, kita juga bisa langsung menghapus objek di tengah script dengan menggunakan perintah unset. Sebagai contoh, setelah kita memanggil method showInformation, kita panggil unset($budi).

Kita coba jalankan. Sekarang setelah tulisan 'Budi belajar di 2A', maka keluar tulisan objek Budi dihapus. Artinya objek langsung dihapus setelah pemanggilan method showInformation. Namun ingat bahwa kalau kita sudah memanggil unset, artinya kita sudah tidak boleh mengakses objek $budi itu lagi.

Selain memanggil unset, kita juga bisa menghapus objek dengan cara menyimpan nilai lain ke variable $budi. Misalkan kita tulis kode $budi = ''. Kita jalankan. Maka bisa dilihat bahwa objek $budi dihapus setelah pemanggilan showInformation. Mengapa bisa dihapus? Karena pada saat kita menyimpan nilai string kosong ke variable $budi, garbage collector PHP mendeteksi bahwa sudah tidak ada variable yang merujuk ke objek 'Budi'. Jadi secara otomasi PHP menghapus objeknya.

2 Jam 41 Menit

Dengan menggunakan fasilitas tanya jawab, maka Anda bisa bertanya dan akan dijawab langsung oleh instruktur kursus.

Anda belum terdaftar pada kursus ini sehingga tidak bisa mengajukan pertanyaan.