7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. Back-End

PHP Berorientasi Objek untuk Pemula

Read Time: 26 mins

Indonesian (Bahasa Indonesia) translation by ⚡ Rova Rindrata (you can also view the original English article)

Untuk banyak pemrogram PHP, pemrograman berorientasi objek adalah sebuah konsep yang menakutkan, penuh dengan sintaks rumit dan hambatan lain. Seperti yang dijelaskan dalam buku saya, Pro PHP and jQuery, Anda akan mempelajari konsep-konsep di belakang pemrograman berorientasi objek (OOP), sebuah gaya mengkode di mana tindakan yang terkait dikelompokkan ke dalam kelas untuk membantu menciptakan kode yang lebih kompak, yang efektif.

Memahami Pemrograman Berorientasi Objek

Pemrograman berorientasi objek adalah gaya mengkode yang memungkinkan pengembang untuk mengelompokkan tugas-tugas serupa ke dalam kelas. Ini membantu menjaga kode mengikuti prinsip "jangan mengulangi dirimu sendiri" (DRY) dan mudah-untuk-memelihara.

"Pemrograman berorientasi objek adalah gaya mengkode yang memungkinkan pengembang untuk mengelompokkan tugas-tugas serupa ke dalam kelas."

Salah satu manfaat utama dari pemrograman DRY adalah bahwa, jika sepotong informasi berubah dalam program Anda, biasanya hanya satu perubahan yang diperlukan untuk memperbarui kode. Salah satu mimpi buruk bagi para pengembang adalah menjaga kode dimana data dinyatakan berulang-ulang, yang berarti setiap perubahan pada program menjadi permainan seperti Where's Waldo? yang jauh lebih membuat frustasi ketika mereka berburu untuk data dan fungsi yang digandakan.

OOP menakutkan bagi banyak pengembang karena memperkenalkan sintaks baru dan, sekilas tampaknya jauh lebih kompleks daripada kode prosedural sederhana, atau inline. Namun, setelah pemeriksaan lebih dekat, OOP adalah sebenarnya sangat sederhana dan pada akhirnya pendekatan yang lebih sederhana untuk pemrograman.

Pengertian Objek dan Kelas

Sebelum Anda dapat masuk terlalu jauh ke dalam poin-poin penting dari OOP, pemahaman dasar tentang perbedaan antara objek dan kelas ini diperlukan. Bagian ini akan membahas blok bangunan kelas, kemampuan mereka yang berbeda, dan beberapa kegunaan dari mereka.

Mengenali Perbedaan Antara Objek dan Kelas

Foto oleh Instant Jefferson dan John Wardell

Pengembang mulai berbicara tentang objek dan kelas, dan mereka muncul menjadi istilah dipertukarkan. Namun, hal ini tidak terjadi.

Secara langsung, ada kebingungan dalam OOP: pengembang berpengalaman mulai berbicara tentang objek dan kelas, dan mereka tampaknya menjadi istilah yang dipertukarkan. Hal ini tidak terjadi, namun, meskipun perbedaan dapat menjadi sulit untuk mengingatnya di kepala Anda pada awalnya.

Kelas, misalnya, adalah seperti denah sebuah rumah. Ia mendefinisikan bentuk rumah di atas kertas, dengan hubungan antara bagian-bagian yang berbeda dari rumah yang jelas dan direncanakan, meskipun rumahnya belum terwujud.

Sebuah objek, kemudian, adalah seperti rumah yang sebenarnya dibangun sesuai dengan denahnya. Data yang tersimpan dalam objek seperti kayu, kawat, dan beton yang membentuk rumah: tanpa dirakit sesuai dengan denah, itu hanyalah tumpukan barang-barang. Namun, ketika itu semua dikumpulkan bersama-sama, menjadi rumah yang terorganisir, yang berguna.

Kelas membentuk struktur dari data dan tindakan, dan menggunakan informasi tersebut untuk membangun objek. Lebih dari satu objek yang dapat dibangun dari kelas yang sama pada waktu yang sama, masing-masing independen dari yang lainnya. Melanjutkan dengan analogi konstruksi kami, ini mirip dengan cara seluruh bagian dapat dibangun dari denah yang sama: bahwa 150 rumah yang berbeda semua terlihat sama, namun berbeda
keluarga dan dekorasi di dalamnya.

Struktur Class

Sintaks untuk membuat kelas ini cukup sederhana: mendeklarasikan kelas menggunakan kata kunci class, diikuti oleh nama kelas dan satu set kurung kurawal ({}):

Setelah membuat kelas, kelas baru dapat diturunkan dan disimpan dalam variabel menggunakan kata kunci new:

Untuk melihat isi kelas, menggunakan var_dump():

Cobalah proses ini dengan menempatkan semua kode sebelumnya dalam sebuah file baru yang disebut test.php di folder pengujian [lokal Anda]:

Load halaman di browser Anda di http://localhost/test.php dan akan menampilkan berikut ini:

Dalam bentuk yang paling sederhana, Anda baru saja menyelesaikan skrip OOP pertama Anda.

Mendefinisikan Properti Kelas

Untuk menambahkan data ke dalam kelas, properti, atau variabel kelas-tertentu, digunakan. Ini bekerja persis seperti variabel biasa, kecuali mereka terikat ke objek dan karena itu hanya dapat diakses menggunakan objek.

Untuk menambahkan properti ke MyClass, tambahkan kode berikut ke skrip Anda:

Kata kunci public menentukan visibilitas dari properti, yang Anda akan belajar tentangnya sedikit dalam bab ini kemudian. Selanjutnya, properti dinamai menggunakan sintaks variabel standar, dan nilainya ditetapkan (meskipun properti kelas tidak memerlukan nilai awal).

Untuk membaca properti ini dan output ke browser, referensikan objek dari mana yang akan dibaca dan properti yang harus dibaca:

Karena beberapa contoh kelas dapat ada, jika objek individu tidak direferensikan, skrip akan mampu untuk menentukan objek mana untuk membaca darinya. Penggunaan panah (->) adalah membangun OOP yang mengakses properti dan metode yang terkandung dari objek tersebut.

Mengubah skrip di test.php untuk membacakan properti daripada dumping seluruh kelas dengan memodifikasi kode seperti yang ditunjukkan:

Refresh browser Anda sekarang akan menghasilkan output berikut:

Mendefinisikan Metode Kelas

Methods adalah fungsi kelas-tertentu. Tindakan individu yang akan mampu dilakukan objek didefinisikan dalam kelas sebagai metode.

Misalnya, untuk membuat metode yang akan mengatur dan mendapatkan nilai properti kelas $prop1, tambahkan baris berikut ke kode Anda:

Catatan — OOP memungkinkan untuk mereferensikan objeknya sendiri menggunakan $this. Ketika bekerja dalam sebuah metode, menggunakan $this dengan cara yang sama Anda akan menggunakan nama objek di luar kelas.

Untuk menggunakan metode tersebut, panggil mereka seperti fungsi biasa, tapi pertama-tama, referensikan objek yang memiliki mereka. Membaca properti dari MyClass, ubah nilainya, dan membacanya lagi dengan membuat perubahan di bawah ini:

Reload browser Anda, dan Anda akan melihat hal berikut:

"Kekuatan OOP menjadi jelas ketika menggunakan beberapa contoh
kelas yang sama."

Ketika Anda me-load hasil di browser Anda, mereka terbaca sebagai berikut:

Seperti yang Anda lihat, OOP membuat objek-objek sebagai entitas yang terpisah, yang membuatnya memudahkan untuk pemisahan dari potongan-potongan kode yang berbeda menjadi bundel terkait yang kecil.

Metode Magic dalam OOP

Untuk membuat penggunaan objek-objek lebih mudah, PHP juga menyediakan sejumlah metode magic, atau metode khusus yang dipanggil pada saat tindakan umum tertentu terjadi dalam objek-objek. Ini memungkinkan pengembang untuk melakukan sejumlah tugas-tugas yang berguna dengan relatif mudah.

Menggunakan Constructor dan Destructor

Ketika sebuah objek dibuat, hal ini sering diinginkan untuk mengatur beberapa hal secara langsung. Untuk menangani hal ini, PHP menyediakan metode magic __construct(), yang dipanggil secara otomatis setiap kali sebuah objek baru
dibuat.

Untuk tujuan menggambarkan konsep constructor, tambahkan constructor untuk MyClass yang akan menampilkan pesan setiap kali sebuah instance baru dari kelas dibuat:

Catatan — __CLASS__ mengembalikan nama kelas yang dipanggil; ini adalah apa yang dikenal sebagai konstanta magic. Ada beberapa konstanta magic yang tersedia, yang Anda dapat membaca lebih lanjut tentangnya di manual PHP.

Reload file di browser Anda akan menghasilkan hasil sebagai berikut:

Untuk memanggil fungsi ketika objek dihancurkan, disediakan metode magic __destruct(). Berguna untuk pembersihan kelas (menutup koneksi database, misalnya).

Output sebuah pesan ketika objek dihancurkan dengan mendefinisikan metode magic
__destruct() di MyClass:

Setelah mendefinisikan sebuah destructor, reload file tes yang menghasilkan output berikut:

"Ketika mencapai akhir dari file, PHP secara otomatis melepas semua sumber daya."

Untuk secara eksplisit memicu destructor, Anda dapat menghancurkan objek yang menggunakan
fungsi unset():

Sekarang hasilnya berubah menjadi berikut ketika di-load di browser Anda:

Mengkonversi ke String

Untuk menghindari kesalahan jika skrip berupaya untuk meng-output MyClass sebagai sebuah string, metode magic lain yang digunakan disebut __toString().

Tanpa __toString()mencoba untuk output objek sebagai string mengakibatkan kesalahan fatal. Cobalah menggunakan echo untuk output objek tanpa metode magic di tempatnya:

Hasilnya sebagai berikut:

Untuk menghindari kesalahan ini, tambahkan metode __toString():

Dalam hal ini, mencoba untuk mengkonversi objek ke string menghasilkan panggilan ke metode getProperty(). Load skrip test di browser Anda untuk melihat hasilnya:

Tips — Selain metode magic yang dibahas dalam bagian ini, beberapa lainnya juga tersedia. Untuk daftar lengkap dari metode magic, lihatlah halaman manual PHP.

Menggunakan Pewarisan Kelas

Kelas dapat mewarisi metode dan properti dari kelas lain menggunakan kata kunci extends. Misalnya, untuk membuat kelas kedua itu meluaskan MyClass dan menambahkan sebuah metode, Anda akan menambahkan kode berikut ke file tes:

Setelah reload file tes di browser Anda, berikut adalah outputnya:

Menimpa Properti dan Metode yang Diwariskan

Untuk mengubah perilaku properti yang sudah ada atau metode di kelas yang baru, Anda hanya dapat menimpanya dengan menyatakannya lagi di kelas yang baru:

Ini perubahan output di browser:

Menjaga Fungsi Metode Asli Sementara Menimpa Metode

Untuk menambah fungsionalitas baru ke metode yang diwariskan sementara menjaga metode yang asli tetap utuh, gunakan kata kunci parent dengan scope resolution operator (::):

Ini output hasil dari konstruktor induk dan konstruktor kelas yang baru:

Menetapkan Visibilitas dari Properti dan Metode

Untuk menambahkan kontrol atas objek, metode dan properti maka ditugaskan visibilitas. Ini mengontrol bagaimana dan dari mana properti dan metode dapat diakses. Ada tiga kata kunci visibilitas: publicprotected, dan private. Selain visibilitasnya, metode atau properti dapat dinyatakan sebagai static, yang memungkinkan mereka untuk dapat diakses tanpa instansiasi dari kelas.

"Untuk menambahkan kontrol atas objek, metode dan properti maka ditugaskan visibilitas."

Catatan — Visibilitas adalah fitur baru dari PHP 5. Untuk informasi tentang kompatibilitas OOP dengan PHP 4, lihat halaman manual PHP.

Properti dan Metode Public

Semua metode dan properti yang telah Anda digunakan sejauh ini adalah public. Ini berarti bahwa mereka dapat diakses di mana saja, baik di dalam kelas maupun secara eksternal.

Properti dan Metode Protected

Ketika sebuah properti atau metode dinyatakan protectedia hanya dapat diakses di dalam kelas itu sendiri atau di kelas-kelas turunannya (kelas yang meng-extend kelas yang berisi metode protected).

Menyatakan metode getProperty() sebagai protected di MyClass dan coba untuk mengaksesnya secara langsung dari luar kelas:

Setelah mencoba untuk menjalankan skrip ini, error berikut muncul:

Sekarang, buat metode baru dalam MyOtherClass untuk memanggil metode getProperty():

Ini menghasilkan hasil yang diinginkan:

Properti dan Metode Private

Properti atau method yang dideklarasikan private ini dapat diakses hanya dari dalam kelas yang mendefinisikannya. Ini berarti bahwa bahkan jika kelas baru meng-extend kelas yang mendefinisikan properti private, properti atau metode tersebut tidak akan tersedia di semua kelas anak.

Untuk menunjukkan hal ini, nyatakan getProperty() sebagai private di MyClass, dan berusaha untuk memanggil callProtected() dari 
MyOtherClass:

Reload browser Anda, dan muncul error berikut:

Properti dan Metode Static

Metode atau properti yang dinyatakan static dapat diakses tanpa instantiasi kelas pertama kali; Anda hanya memberikan nama kelas, scope resolution operator, dan nama properti atau metode.

"Salah satu manfaat utama menggunakan properti static adalah bahwa mereka menyimpan nilai-nilai yang disimpan dalam durasi skrip."

Untuk menunjukkan hal ini, tambahkan properti static yang disebut $count dan metode static yang disebut plusOne() ke MyClass. Kemudian atur loop do...while untuk output nilai bertambah dari $count selama nilainya adalah kurang dari 10:

Catatan — Saat mengakses properti static, tanda dolar 
($) datang setelah scope resolution operator.

Ketika Anda me-load script ini di browser Anda, berikut adalah outputnya:

Mengomentari dengan DocBlocks

"Mengomentari bergaya DocBlock adalah metode yang diterima
secara luas dari mendokumentasikan kelas."

Sementara bukan merupakan bagian resmi dari OOP, mengomentari bergaya DocBlock adalah metode pendokumentasian kelas yang diterima secara luas. Selain menyediakan standar untuk
pengembang untuk menggunakannya ketika menulis kode, ini juga telah diadopsi oleh banyak kit pengembangan perangkat lunak (SDK) yang paling populer, seperti Eclipse dan NetBeans, dan akan digunakan untuk menghasilkan petunjuk kode.

Sebuah DocBlock didefinisikan dengan menggunakan blok komentar yang dimulai dengan tambahan tanda bintang:

Kekuatan sebenarnya dari DocBlock adalah dilengkapi dengan kemampuan untuk menggunakan tags, yang dimulai dengan simbol (@) yang segera diikuti oleh nama tag dan nilai dari tag. Tag DocBlock memungkinkan pengembang untuk menentukan penulis dari sebuah file, lisensi dari kelas, informasi properti atau metode, dan informasi berguna lainnya.

Tag yang paling umum digunakan:

  • @author: Penulis dari elemen saat ini (yang mungkin adalah kelas, file, metode, atau setiap bit kode) terdaftar menggunakan tag ini. Beberapa tag penulis dapat digunakan di dalam DocBlock yang sama jika lebih dari satu penulis dikreditkan. Format untuk nama penulis adalah John Doe <john.doe@email.com>.
  • @copyright: Ini menandakan tahun hak cipta dan nama pemegang hak cipta untuk elemen saat ini. Formatnya 2010 Pemegang Hak Cipta.
  • @license: Ini link untuk lisensi elemen saat ini. Format untuk informasi lisensi adalah
    http://www.example.com/path/to/license.txt Nama Lisensi.
  • @var: Ini memegang jenis dan keterangan dari variabel atau properti kelas. Formatnya jenis elemen deskripsi.
  • @param: Tag Ini menunjukkan jenis dan deskripsi dari parameter fungsi atau metode. Formatnya jenis $nama_element elemen deskripsi.
  • @return: Jenis dan deskripsi dari nilai yang dikembalikan dari fungsi atau metode yang diberikan dalam tag ini. Formatnya jenis pengembalian elemen deskripsi.

Sampel kelas yang dikomentari dengan DocBlocks mungkin terlihat seperti ini:

Setelah anda memindai kelas sebelumnya, manfaat DocBlock yang jelas: segala sesuatu yang didefinisikan secara jelas sehingga pengembang berikutnya dapat mengambil kode dan tidak perlu harus bertanya-tanya potongan kode melakukan apa atau apa yang harus dikandungnya.

Membandingkan Kode Berorientasi Objek dan Prosedural

Tidak ada benar-benar yang benar dan salah untuk menulis kode. Seperti yang dikatakan, bagian ini menguraikan argumen yang kuat untuk mengadopsi pendekatan berorientasi objek dalam pengembangan perangkat lunak, terutama pada aplikasi yang besar.

Alasan 1: Kemudahan Pelaksanaan

"Sementara itu dapat menjadi sesuatu yang membingungkan pada awalnya, OOP benar-benar menyediakan pendekatan yang lebih mudah untuk berurusan dengan data."

Sementara itu dapat menjadi sesuatu yang membingungkan pada awalnya, OOP benar-benar menyediakan pendekatan yang lebih mudah untuk berurusan dengan data. Karena objek dapat menyimpan data secara internal, variabel tidak perlu diteruskan dari fungsi ke fungsi untuk bekerja dengan baik.

Juga, karena beberapa instance dari kelas yang sama dapat berwujud secara bersamaan, berurusan dengan set data yang besar adalah jauh lebih mudah. Sebagai contoh, bayangkan Anda memiliki informasi dua orang yang sedang diproses dalam file. Mereka membutuhkan nama, pekerjaan, dan usia.

Pendekatan Prosedural

Berikut adalah pendekatan prosedural untuk contoh kita:

Ketika dijalankan, kode menghasilkan output berikut:

Sementara kode ini tidak selalu buruk, ada banyak yang perlu diingat saat mengkode. Array dari orang yang terkena atribut harus disampaikan dan dikembalikan dari masing-masing panggilan fungsi, yang meninggalkan margin untuk kesalahan.

Untuk membersihkan contoh ini, akan diinginkan untuk meninggalkan beberapa hal untuk pengembang sesedikit mungkin. Hanya informasi yang benar-benar penting untuk operasi saat ini harus perlu dilewatkan ke fungsi.

Ini adalah di mana langkah-langkah OOP datang dan membantu Anda membersihkannya.

Pendekatan OOP

Berikut adalah pendekatan OOP untuk contoh kita:

Ini adalah output berikut di browser:

Ada sedikit pengaturan yang lebih banyak terlibat untuk membuat pendekatan berorientasi objek, tapi setelah kelas didefinisikan, membuat dan memodifikasi orang adalah mudah sekali; informasi orang tidak perlu diteruskan atau dikembalikan dari metode, dan hanya benar-benar informasi penting yang dilewatkan pada masing-masing metode.

"OOP akan secara signifikan mengurangi beban kerja Anda jika diterapkan dengan benar."

Pada skala kecil, perbedaan ini mungkin tidak tampak banyak, tetapi ketika aplikasi Anda tumbuh dalam ukurannya, OOP akan secara signifikan mengurangi beban kerja Anda jika dilaksanakan dengan baik dan benar.

Tips — Tidak semuanya harus berorientasi objek. Fungsi cepat yang menangani sesuatu yang kecil di satu tempat di dalam aplikasi tidak selalu harus dibungkus dalam kelas. Gunakan penilaian terbaik Anda ketika memutuskan antara pendekatan berorientasi objek dan prosedural.

Alasan 2: Pengorganisasian yang Lebih Baik

Manfaat lain dari OOP adalah seberapa baik ini cocok untuk menjadi mudah dikemas dan dikatalog. Setiap kelas umumnya dapat disimpan dalam file terpisah sendiri, dan jika konvensi penamaan yang seragam digunakan, mengakses kelas-kelas ini sangat mudah.

Misalnya Anda punya sebuah aplikasi dengan 150 kelas yang dipanggil secara dinamis melalui file kontroler pada root dari filesystem aplikasi Anda. Semua 150 kelas mengikuti konvensi penamaan class.classname.inc.php dan berada di folder inc dari aplikasi Anda.

Kontroler dapat melaksanakan fungsi PHP __autoload() untuk secara dinamis menarik hanya kelas-kelas yang dibutuhkan sebagaimana mereka dipanggil, bukannya memasukkan semua 150 di file kontroler untuk berjaga-jaga atau datang dengan beberapa cara pintar termasuk file dalam kode Anda sendiri:

Memiliki masing-masing kelas dalam file terpisah juga membuat kode lebih portabel dan lebih mudah untuk menggunakannya kembali di aplikasi baru tanpa benyak-banyak meng-copy dan mem-paste.

Alasan 3: Pemeliharaan Lebih Mudah

Karena sifat lebih kompak dari OOP ketika dilakukan dengan benar, perubahan dalam kode yang biasanya jauh lebih mudah untuk ditemukan dan membuat dari pada implementasi kode prosedural sepanjang spaghetti.

Jika serangkaian informasi tertentu memperoleh atribut baru, potongan perangkat lunak prosedural mungkin diperlukan (dalam skenario terburuk) bahwa atribut baru ditambahkan ke masing-masing fungsi yang menggunakan array.

Aplikasi OOP berpotensi dapat diperbarui semudah menambahkan properti baru dan kemudian menambahkan metode yang menangani properti itu.

Banyak manfaat yang dibahas dalam bagian ini merupakan hasil OOP dalam kombinasi dengan praktek-praktek pemrograman DRY. Itu pasti mungkin untuk membuat kode prosedural yang mudah-untuk-mempertahankan yang tidak menimbulkan mimpi buruk, dan sama-sama mungkin dapat membuat kode berorientasi obyek mengerikan. [Pro PHP and jQuery] akan mencoba untuk menunjukkan kombinasi dari kebiasaan mengkode yang baik dalam hubungannya dengan OOP untuk menghasilkan kode yang mudah dibaca dan dipelihara.

Ringkasan

Pada titik ini, Anda seharusnya merasa nyaman dengan gaya pemrograman berorientasi objek. Belajar OOP adalah cara yang bagus untuk meningkatkan pemrograman Anda ke tingkat berikutnya. Bila dilaksanakan dengan baik, OOP akan membantu Anda menghasilkan kode portabel yang mudah-untuk-dibaca, mudah-untuk-dijaga, yang akan menghematkan Anda (dan pengembang yang bekerja dengan Anda) jam kerja ekstra. Apakah Anda terjebak pada sesuatu yang tidak dibahas di artikel ini? Apakah Anda sudah menggunakan OOP dan memiliki beberapa tips untuk para pemula? Berbagilah di komentar!

Catatan Penulis — Tutorial ini adalah kutipan dari Pro PHP and jQuery (Apress, 2010).

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Scroll to top
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.