Tutorial OOP Dasar Pada PHP

Include dan Require

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

Pada video sebelumnya, kita menuliskan kode pada beberapa file yang berbeda. Beberapa file untuk menuliskan definisi dari kelas. Sedangkan satu file lagi adalah untuk melakukan instantiate dan menggunakan kelas tersebut.

Sebelumnya saya sudah pernah bahas sekilas, bahwa untuk menggunakan kode yang berada di file lain, kita bisa menggunakan include atau require. Namun di video sebelumnya kita langsung menggunakan require ya, tanpa ada penjelasan yang lebih detil. Dalam video ini kita akan bahas lebih jauh, apa sih perbedaan antara include dengan require.

Kegunaan dari kedua fungsi ini adalah sama. Jadi keduanya memberikan hasil yang sama apabila tidak terjadi error. Perbedaannya hanya kelihatan apabila file pada argument-nya tidak berhasil ditemukan. Kalau kita menggunakan include, maka PHP hanya mengeluarkan warning bahwa file tidak ditemukan. Namun PHP tetap mengeksekusi kode berikutnya. Sedangkan kalau kita menggunakan require, maka PHP mengeluarkan fatal error dan langsung menghentikan seluruh eksekusi.

Berdasarkan perbedaan tersebut, maka kita biasanya menggunakan require kalau kode yang berada di file lain adalah PHP. Di sisi lain, kita menggunakan include apabila kode yang berada di file lain adalah kode HTML.

Kita coba praktek ya. Kita buka kembali kode kemarin. Disini kita menggunakan 3 buah file, yang utama adalah main.php. File ini memanggil 2 buah file lain yaitu Student.php dan Teacher.php yang masing-masing berisi definisi dari kelas Student dan Teacher. Disini kita memanggil file lain dengan menggunakan require. Kalau kita jalankan main.php, maka kita mendapatkan 3 baris output seperti ini.

Misalkan function require pada file Teacher.php kita ubah menjadi include. Kemudian kita jalankan. Maka hasilnya sama persis ya. Kalau tidak terjadi error, kegunaan dari kedua function adalah sama. Yang membedakannya hanyalah cara menangani error-nya.

Agar terjadi error, maka kita coba dengan sengaja menghapus nama folder class pada argument include. Kita coba jalankan. Kita mendapatkan warning bahwa file Teacher.php tidak ditemukan. Namun perhatikan dibawahnya masih keluar input Budi belajar dan Andi belajar. Artinya kode untuk pembuatan object Student masih tetap dijalankan. Hanya saja dibawahnya lagi terjadi fatal error kelas Teacher tidak ditemukan, karena kita gagal menemukan kelas Teacher.php.

Jadi kalau kita menggunakan include, dan ternyata file pada argument tidak ditemukan, maka PHP hanya mengeluarkan pesan warning. PHP tetap melanjutkan eksekusi kode dibawahnya.

Kalau misalkan kita ganti kembali menjadi require, kemudian kita jalankan. Maka PHP menampilkan fatal error karena file teacher.php tidak ditemukan. Perhatikan bahwa setelah baris ke 4, semua kode sudah tidak dijalankan lagi. Tidak ada tulisan Budi belajar ataupun Andi belajar seperti pada include tadi.

Jadi ini perbedaan antara include dengan require ya. Kalau kita menggunakan include, maka PHP hanya menampilkan warning dan tetap melanjutkan eksekusi kode berikutnya. Sedangkan kalau kita menggunakan require, maka PHP mengeluarkan fatal error dan langsung berhenti.

Nah, dalam penggunaannya, biasanya programmer menggunakan require untuk merujuk ke kode PHP, dan menggunakan include untuk merujuk ke kode HTML. Berhubung file Teacher.php disini berisi kode PHP yang mendefinisikan kelas Teacher, maka lebih cocok kita menggunakan require. Kita perbaiki dahulu argument-nya agar tidak error.

Untuk mencoba menggunakan include, kita buat file baru, misalkan kita beri nama view.php. Kalau kita menggunakan konsep MVC atau Model View Controller, maka kode HTML bisanya kita taruh pada bagian view. Ektension dari file-nya tetap php ya, bukan html. Karena biasanya kita tetap menaruh kode php di dalam html-nya.

Kita buka file view.php. Lalu kita isi dengan boilerplate dari HTML5. Kita buka kembali main.php. Lalu pada bagian paling bawah, kita panggil include('view.php'). Kita jalankan. Kira-kira apa yang keluar sebagai hasil?

Kalau kita include file yang isinya tidak dibuka menggunakan tag php, maka seluruh isi file akan ditampilkan sebagai hasil. Disini kita bisa melihat semua html boilerplate yang ditulis pada view.php.

Namun kita tetap bisa menyisipkan kode php di dalam html. Misalkan di dalam tag body, kita tambahkan tag pembuka PHP. Lalu kita tulis echo 'Hello World'. Tag penutup PHP. Kita jalankan. Maka sebagai hasilnya di dalam tag body kita mendapatkan tulisan 'Hello World'. Disini ada perbedaan dengan source code ya. Kalau pada source code terdapat tag php dan echo, sedangkan pada hasilnya hanya ada tulisan 'Hello World' saja. Disinilah kegunaan utama PHP sebagai Hypertext Preprocessor.

Masih berhubungan dengan penggunaan banyak file pada source code. Kalau misalkan kode utama kita merujuk ke 2 buah file php eksternal. Kemudian ternyata kedua file tersebut merujuk lagi ke satu file yang sama. Sebagai akibatnya, file PHP yang terakhir ini dijalankan sebanyak 2 kali. Hal seperti ini bisa menyebabkan error kalau di dalam file PHP terdapat deklarasi function atau class. PHP akan menganggap bahwa kita melakukan deklarasi function dengan nama yang sama sebanyak 2 kali.

Untuk mencegah error seperti ini, kita bisa menggunakan require_once. Jadi kalau misalkan kita merujuk ke file yang sama lebih dari satu kali, PHP hanya melakukan eksekusi terhadap kodenya sebanyak 1 kali. Kita akan terhindar dari fatal error yang disebabkan karena deklarasi berganda.

Kita coba praktek ya. Kita buat file baru lagi, kita beri nama library.php. Di dalamnya kita buat function sayHello yang isinya echo 'Hello World'. Lalu kita kembali ke main.php. Pertama kita komentari dahulu include('view.php') agar nanti output script kita tidak terlalu banyak. Kemudian kita tambahkan require('library.php'). Kalau kita jalankan, maka keluar hasil biasa ya. Tidak ada error.

Namun apa yang terjadi kalau kita copy paste function sayHello ini pada file yang sama, yaitu library.php? Sekarang kita mendapatkan pesan error cannot redeclare sayHello karena sudah pernah dideklarasikan pada baris ke empat.

Kita hapus kembali function sayHello tambahan. Sekarang kita kembali ke main.php. Apa yang terjadi kalau misalkan kode require('library.php') ini kita copy paste juga sehingga ada 2? Nah, kita kembali mendapatkan error yang sama, yaitu cannot redeclare sayHello. Pada sekarang function sayHello-nya hanya ada 1. Yang terjadi disini adalah, function sayHello-nya seolah-olah menjadi 2, karena file library.php di-require sebanyak 2 kali. Sebagai akibatnya, kode pada library.php dijalankan sebanyak 2 kali. Sehingga terjadi deklarasi ganda.

Kalau fungsi require ini berada pada file yang sama, maka kita bisa dengan mudah mendeteksi kesalahan dan menghapus salah satu require-nya. Namun hal seperti ini akan menjadi lebih sulit kalau kita sudah menggunakan banyak file. Sebagai contoh, misalkan fungsi require ini kita pindahkan ke Student.php dan Teacher.php.

Nah, sekarang masalahnya menjadi lebih rumit ya. Karena sekarang main.php hanya require Student.php dan Teacher.php. Namun ternyata kedua file tersebut melakukan require lagi terhadap file yang sama yaitu libary.php. Dan sebagai hasilnya kita mendapatkan fatal error yang sama, yaitu deklarasi ganda pada library.php.

Untuk mencegah hal-hal seperti ini, maka kalau kita ingin menambahkan file PHP yang isinya deklarasi function dan class, lebih disarankan menggunakan require_once. Sebagai contoh kita ganti semua kata require menjadi require_once. Kalau kita gunakan hanya di main.php sebenarnya masih belum ngefek ya. Karena library.php masih tetap dipanggil ganda. Namun kalau di Student.php dan Teacher.php sudah diganti, maka kita sudah tidak mendapatkan error lagi. Karena walaupun library.php kita require berkali-kali, PHP hanya mengeksekusi kodenya sebanyak 1 kali.

Berhubungan dengan require, ada satu hal lagi yang perlu kita perhatikan ya. Biasanya kita membuat satu file khusus untuk deklarasi class. Dan kita menyamakan nama file-nya dengan nama class.

Untuk nama class, kita menggunakan Pascal Case. Artinya kalau nama kelas terdiri dari beberapa kata, maka setiap huruf pertama pada kata menggunakan huruf besar. Kemudian semua kata digabung menjadi satu kata, tidak dipisahkan oleh tanda spasi maupun underscore. Misalkan kalau kelas Teacher ini diubah menjadi MathTeacher, maka kita menggunakan huruf M besar dan T besar. Dan biasanya nama file-nya juga kita ubah mengikuti nama kelas tersebut.

Kita kembalikan dahulu ke Teacher ya. Yang perlu diperhatikan disini adalah berhubung class Teacher disini menggunakan huruf T besar, maka nama file-nya juga menggunakan T besar. Perhatikan pada saat kita melakukan require terhadap file tersebut, maka kita juga harus menggunakan huruf T besar.

Namun sifat case sensitif pada nama file ini ternyata bergantung pada sistem operasi yang sedang digunakan. Bagi teman-teman yang menggunakan sistem operasi Windows, seperti saya saat ini, maka nama file-nya bersifat tidak case sensitif. Artinya kalau nama file teacher.php pada require_once diubah menjadi huruf t kecil, maka kode berjalan tanpa error.

Sayangnya hal ini akan menjadi fatal error pada saat source code kita upload ke server linux. Dan justru kita akan lebih sulit untuk mencari kesalahannya ada dimana. Karena kode yang sama bisa berjalan dengan baik pada komputer kita, namun menjadi fatal error pada server linux. Oleh karena itu kita harus membiasakan diri untuk menggunakan huruf besar atau kecil yang sesuai pada saat menyebutkan nama file atau folder pada perintah include dan require.

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.