Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Back-End
Code

Objek Berorientasikan Objek PHP untuk Pemula

by
Difficulty:IntermediateLength:LongLanguages:

Malay (Melayu) translation by Aisyah Arrafah (you can also view the original English article)

Bagi banyak pengaturcara PHP, pengaturcaraan berorientasikan objek adalah konsep yang menakutkan, penuh dengan sintaksis rumit dan sekatan jalan lain. Seperti yang terperinci dalam buku saya, Pro PHP dan jQuery, anda akan mempelajari konsep-konsep di belakang pengaturcaraan berorientasikan objek (OOP), gaya pengekodan di mana tindakan yang berkaitan dikelompokkan ke dalam kelas untuk membantu dalam membuat lebih banyak, padat dan berkesan kod.

Memahami Pengaturcaraan Berorientasikan Objek

Pengaturcaraan berorientasikan objek adalah gaya pengekodan yang membolehkan pemaju melakukan tugas yang sama ke dalam kelas. Ini membantu menjaga kod berikutan prinsip "jangan ulangi sendiri" (DRY) dan mudah dipelihara.

"Pengaturcaraan berorientasi objek adalah gaya pengekodan yang membolehkan pemaju untuk menggabungkan tugas yang sama ke dalam kelas."

Salah satu manfaat utama pengaturcaraan DRY adalah, jika sekeping maklumat berubah dalam program anda, biasanya hanya satu perubahan diperlukan untuk mengemas kini kod. Salah satu mimpi buruk terbesar bagi pemaju adalah mengekalkan kod di mana data diisytiharkan berulang kali, bermakna apa-apa perubahan kepada program menjadi permainan yang lebih mengecewakan Di mana Waldo? kerana mereka memburu data dan fungsi yang diduplikasi.

OOP menakutkan ramai pemaju kerana ia memperkenalkan sintaks baru dan, sepintas lalu, nampaknya jauh lebih rumit daripada prosedur mudah, atau garis sebaris, kod. Walau bagaimanapun, apabila pemeriksaan yang lebih dekat, OOP sebenarnya pendekatan yang sangat mudah dan akhirnya lebih mudah untuk pengaturcaraan.

Memahami Objek dan Kelas

Sebelum anda dapat masuk ke dalam mata yang lebih baik dari OOP, pemahaman asas mengenai perbezaan antara objek dan kelas adalah perlu. Bahagian ini akan menyusun blok kelas, keupayaan mereka yang berbeza, dan beberapa kegunaannya.

Mengenali Perbezaan Antara Objek dan Kelas

Gambar oleh Instan Jefferson dan John Wardell

Pemaju mula bercakap tentang objek dan kelas, dan mereka nampaknya boleh ditukar ganti. Walau bagaimanapun, ini tidak berlaku.

Dari kelawar, ada kekeliruan di OOP: pemaju berpengalaman mula bercakap mengenai objek dan kelas, dan mereka nampaknya boleh ditukar ganti. Walau bagaimanapun, ini tidak berlaku, walaupun perbezaannya sukar untuk membungkus kepala anda pada mulanya.

Sebagai contoh, kelas adalah seperti perancangan untuk sebuah rumah. Ia mendefinisikan bentuk rumah di atas kertas, dengan hubungan antara bahagian-bahagian rumah yang jelas dan terancang, walaupun rumah itu tidak wujud.

Objek, kemudian, adalah seperti rumah sebenar yang dibina mengikut pelan itu. Data yang tersimpan dalam objek adalah seperti kayu, wayar, dan konkrit yang mengarang rumah: tanpa dipasang mengikut pelan cetak, ia hanyalah timbunan barangan. Walau bagaimanapun, apabila semuanya bersatu, ia menjadi rumah yang teratur dan berguna.

Kelas membentuk struktur data dan tindakan dan menggunakan maklumat tersebut untuk membina objek. Lebih daripada satu objek boleh dibina dari kelas yang sama pada masa yang sama, masing-masing bebas daripada yang lain. Melanjutkan dengan analogi pembinaan kami, ia serupa dengan cara keseluruhan subbahagian boleh dibina dari cetak biru yang sama: 150 rumah yang berbeza yang semuanya kelihatan sama tetapi berbeza
keluarga dan hiasan di dalamnya.

Kelas Penstrukturan

Sintaks untuk membuat kelas cukup mudah: mengisytiharkan kelas menggunakan kata kunci kelas, diikuti dengan nama kelas dan satu set pendakap kerinting ({}):

Setelah mencipta kelas, kelas baru boleh diolah dan disimpan dalam pemboleh ubah menggunakan kata kunci baru:

Untuk melihat kandungan kelas, gunakan var_dump():

Cuba proses ini dengan meletakkan semua kod sebelumnya dalam fail baru yang disebut test.php dalam folder ujian [tempatan]:

Muatkan halaman dalam pelayar anda di http://localhost/test.php dan yang berikut harus dipaparkan:

Dalam bentuk yang paling mudah, anda baru saja selesai skrip OOP pertama anda.

Menentukan Kelas Kelas

Untuk menambah data ke kelas, sifat, atau pembolehubah khusus kelas, digunakan. Kerja-kerja ini sama seperti pembolehubah biasa, kecuali mereka terikat pada objek dan oleh itu hanya boleh diakses menggunakan objek tersebut.

Untuk menambah harta ke MyClass, tambahkan kod berikut ke skrip anda:

Kata kunci awam menentukan keterlihatan harta benda, yang akan anda pelajari sekilas kemudian dalam bab ini. Seterusnya, harta itu dinamakan dengan menggunakan sintaks pembolehubah standard, dan nilai diberikan (walaupun sifat kelas tidak memerlukan nilai permulaan).

Untuk membaca harta ini dan keluarkannya ke penyemak imbas, sebutkan objek yang hendak dibaca dan harta untuk dibaca:

Kerana banyak contoh kelas boleh wujud, jika objek individu tidak dirujuk, skrip tidak akan dapat menentukan objek yang hendak dibaca. Penggunaan anak panah (->) adalah pembinaan OOP yang mengakses sifat-sifat dan kaedah yang terkandung dalam objek tertentu.

Ubah suai skrip dalam test.php untuk membaca harta alih daripada membuang seluruh kelas dengan mengubah kod seperti yang ditunjukkan:

Muat semula penyemak imbas anda sekarang menghasilkan yang berikut:

Menentukan Kaedah Kelas

Kaedah adalah fungsi khusus kelas. Tindakan individu yang dapat dilakukan oleh objek ditentukan dalam kelas sebagai kaedah.

Sebagai contoh, untuk membuat kaedah yang akan ditetapkan dan mendapatkan nilai harta kelas $prop1, tambahkan yang berikut kepada kod anda:

Nota - OOP membenarkan objek untuk merujuk diri menggunakan $ini. Apabila bekerja dalam satu kaedah, gunakan $ini dengan cara yang sama anda akan menggunakan nama objek di luar kelas.

Untuk menggunakan kaedah ini, hubungi mereka seperti fungsi biasa, tetapi pertama, rujukan objek yang mereka milik. Bacalah harta dari MyClass, tukar nilainya, dan bacakannya lagi dengan membuat pengubahsuaian di bawah:

Muat semula penyemak imbas anda, dan anda akan melihat perkara berikut:

"Kuasa OOP menjadi jelas apabila menggunakan banyak contoh
Sama kelas."

Apabila anda memuatkan hasil dalam pelayar anda, mereka membaca seperti berikut:

Seperti yang anda lihat, OOP menyimpan objek sebagai entiti yang berasingan, yang menjadikan pemisahan mudah kod keping yang berlainan ke dalam berkas kecil yang berkaitan.

Kaedah Magic di OOP

Untuk menjadikan penggunaan objek lebih mudah, PHP juga menyediakan beberapa kaedah ajaib, atau kaedah khusus yang dipanggil apabila tindakan umum tertentu berlaku dalam objek. Ini membolehkan pemaju melaksanakan beberapa tugas berguna dengan mudah.

Menggunakan Pembina dan Pemusnahan

Apabila sesuatu objek ditiru, ia sering diinginkan untuk menetapkan beberapa perkara dari kelawar. Untuk mengatasi ini, PHP menyediakan kaedah ajaib __construct(), yang dipanggil secara automatik setiap kali objek baru
dicipta.

Untuk tujuan menggambarkan konsep konstruktor, tambahkan pembina kepada MyClass yang akan mengeluarkan mesej setiap kali contoh baru kelas dibuat:

Nota -__CLASS__ mengembalikan nama kelas di mana ia dipanggil; ini adalah apa yang dikenali sebagai pemalar sihir. Terdapat beberapa pemalar sihir yang ada, yang boleh anda baca lebih lanjut mengenai dalam manual PHP.

Memuat semula fail dalam penyemak imbas anda akan menghasilkan hasil berikut:

Untuk memanggil fungsi apabila objek dimusnahkan, kaedah __destruct() magic tersedia. Ini berguna untuk membersihkan kelas (menutup sambungan pangkalan data, contohnya).

Output mesej apabila objek dimusnahkan dengan menentukan kaedah ajaib
__destruct() dalam MyClass:

Dengan destructor ditakrifkan, muat semula hasil fail ujian dalam output berikut:

"Apabila akhir fail tercapai, PHP secara automatik mengeluarkan semua sumber."

Untuk secara jelas mencetuskan pemusnah, anda boleh memusnahkan objek menggunakan
fungsi tidak ditetapkan():

Kini hasilnya berubah kepada yang berikut apabila dimuatkan di pelayar anda:

Menukar kepada String

Untuk mengelakkan ralat jika skrip cuba mengeluarkan MyClass sebagai rentetan, kaedah sihir lain digunakan dipanggil __toString().

Tanpa __toString(), cuba untuk mengeluarkan objek sebagai hasil rentetan dalam ralat maut. Cuba menggunakan echo untuk mengeluarkan objek tanpa cara ajaib di tempat:

Ini berikutan perkara berikut:

Untuk mengelakkan ralat ini, tambahkan kaedah __toString():

Dalam kes ini, cuba menukar objek kepada hasil rentetan dalam panggilan ke kaedah getProperty(). Muat skrip ujian dalam penyemak imbas anda untuk melihat hasilnya:

Petua - Selain kaedah ajaib yang dibincangkan dalam bahagian ini, beberapa orang lain boleh didapati. Untuk senarai lengkap kaedah sihir, lihat halaman manual PHP.

Menggunakan Warisan Kelas

Kelas boleh mewarisi kaedah dan sifat kelas lain menggunakan kata kunci yang meluas. Sebagai contoh, untuk mencipta kelas kedua yang memperluaskan MyClass dan menambah kaedah, anda akan menambah yang berikut ke fail ujian anda:

Apabila memuat semula fail ujian dalam pelayar anda, berikut adalah output:

Menggredit Hartanah dan Kaedah yang Diwarisi

Untuk mengubah tingkah laku harta atau kaedah sedia ada dalam kelas baru, anda boleh menulis ganti dengan mendekata lagi di kelas baru:

Ini mengubah output dalam penyemak imbas kepada:

Mengekalkan Fungsi Metode Asal Sementara Kaedah Menindih

Untuk menambah fungsi baru kepada kaedah yang diwarisi sambil mengekalkan kaedah asal utuh, gunakan kata kunci induk dengan pengendali resolusi skop (: :):

Ini menghasilkan hasil pembina induk dan pembina kelas baru:

Menetapkan Keterlihatan Harta dan Kaedah

Untuk menambah kawalan ke atas objek, kaedah dan sifat diberikan keterlihatan. Ini mengawal bagaimana dan dari mana sifat dan kaedah boleh diakses. Terdapat tiga kata kunci penglihatan: awam, dilindungi, dan peribadi. Sebagai tambahan kepada penglihatannya, satu kaedah atau harta boleh diisytiharkan sebagai statik, yang membolehkan mereka dapat diakses tanpa instansiasi kelas.

"Untuk menambah kawalan ke atas objek, kaedah dan sifat ditugaskan untuk dilihat."

Nota - Kebolehlihatan adalah ciri baru dari PHP 5. Untuk maklumat tentang keserasian OOP dengan PHP 4, lihat halaman manual PHP.

Harta dan Kaedah Awam

Semua kaedah dan sifat yang telah anda gunakan setakat ini telah diketahui umum. Ini bermakna mereka boleh diakses di mana-mana sahaja, di dalam kelas dan di luar.

Harta dan Kaedah yang Dilindungi

Apabila sesuatu harta atau kaedah diisytiharkan dilindungi, ia hanya boleh diakses dalam kelas itu sendiri atau dalam kelas keturunan (kelas yang memanjangkan kelas yang mengandungi kaedah yang dilindungi).

Isytiharkan kaedah getProperty() sebagai dilindungi di MyClass dan cuba mengaksesnya terus dari luar kelas:

Setelah cuba menjalankan skrip ini, ralat berikut muncul:

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

Ini menjana hasil yang dikehendaki:

Harta dan Kaedah Persendirian

Suatu harta atau kaedah yang diisytiharkan swasta hanya boleh diakses dari dalam kelas yang mentakrifkannya. Ini bermakna walaupun kelas baru memanjangkan kelas yang mentakrifkan harta persendirian, harta atau kaedah itu tidak boleh didapati sama sekali dalam kelas kanak-kanak.

Untuk menunjukkan ini, mengumumkan getProperty() sebagai peribadi di MyClass, dan cuba menghubungi callProtected() dari
MyOtherClass:

Muat semula penyemak imbas anda, dan ralat berikut muncul:

Harta dan Kaedah Statik

Kaedah atau harta yang diisytiharkan statik boleh diakses tanpa terlebih dahulu menamakan kelas; anda hanya membekalkan nama kelas, pengendali resolusi ruang lingkup, dan nama harta atau kaedah.

"Salah satu manfaat utama untuk menggunakan sifat statik ialah mereka menyimpan nilai yang disimpan untuk tempoh skrip."

Untuk menunjukkan ini, tambahkan harta statik yang dipanggil $kiraan dan kaedah statik yang dipanggil plusOne() untuk MyClass. Kemudian buat do ... sementara gelung untuk mengeluarkan nilai tambah $dikira selagi nilai kurang daripada 10:

Nota - Apabila mengakses sifat statik, tanda dolar
($)datang selepas pengendali resolusi skop.

Apabila anda memuat skrip ini dalam pelayar anda, berikut adalah output:

Mengulas dengan DocBlocks

"Gaya mengulas DocBlock adalah secara meluas
kaedah yang diterima untuk mendokumentasikan kelas."

Walaupun bukan sebahagian rasmi OOP, gaya mengulas DocBlock adalah kaedah yang diterima secara meluas untuk mendokumentasikan kelas. Selain menyediakan standard untuk
pemaju untuk gunakan apabila menulis kod, ia juga telah digunapakai oleh kebanyakan kit pembangunan perisian paling popular (SDKs), seperti gerhana dan NetBeans, dan akan digunakan untuk menjana kod Petua.

DocBlock yang ditakrifkan dengan menggunakan komen blok yang bermula dengan asterisk tambahan:

Kuasa sebenar DocBlocks datang dengan keupayaan untuk menggunakan tag, yang bermula dengan simbol () dengan serta-merta diikuti dengan nama tag dan nilai tag. DocBlock tag membenarkan para pemaju untuk menentukan penulis fail, lesen untuk kelas, harta atau maklumat kaedah dan maklumat lain yang berguna.

Tag yang paling biasa digunakan mengikuti:

  • pengarang: Penulis elemen semasa (yang mungkin menjadi kelas, fail, kaedah, atau sebarang kod) disenaraikan menggunakan teg ini. Tag pengarang berganda boleh digunakan dalam DocBlock yang sama jika lebih daripada satu pengarang dikreditkan. Format untuk nama pengarang ialah John Doe .
  • hak cipta: Ini menandakan tahun hak cipta dan nama pemegang hak cipta untuk elemen semasa. Formatnya ialah Pemegang Hak Cipta 2010.
  • lesen: Pautan ini kepada lesen untuk elemen semasa. Format untuk maklumat lesen ialah
    http://www.example.com/path/to/license.txt Nama Lesen.
  • var: Ini memegang jenis dan perihalan sifat ubah atau kelas. Formatnya ialah taip keterangan elemen.
  • param: Teg ini menunjukkan jenis dan perihalan parameter fungsi atau kaedah. Formatnya ialah taip keterangan element element_ element_name.
  • pulangan: Jenis dan perihalan nilai pulangan fungsi atau kaedah disediakan dalam tag ini. Formatnya ialah taipkan penerangan elemen kembali.

Kelas sampel mengulas dengan DocBlocks mungkin kelihatan seperti ini:

Sebaik sahaja anda mengimbas kelas terdahulu, manfaat DocBlock adalah jelas: semuanya jelas ditakrifkan supaya pemaju seterusnya boleh mengambil kod itu dan tidak perlu tertanya-tanya apa coretan kod atau apa yang harus mengandunginya.

Membandingkan Kod Berorientasikan Objek dan Prosedur

Tidak benar cara yang betul dan salah untuk menulis kod. Bahawa dikatakan, bahagian ini menggariskan hujah yang kuat untuk mengadaptasi pendekatan berorientasikan objek dalam pembangunan perisian, terutama dalam aplikasi besar.

Sebab 1: Kemudahan Pelaksanaan

'Walaupun ia mungkin menakutkan pada mulanya, OOP sebenarnya menyediakan pendekatan yang lebih mudah untuk menangani data.'

Walaupun ia mungkin menakutkan pada mulanya, OOP sebenarnya memberikan pendekatan yang lebih mudah untuk menangani data. Oleh kerana objek boleh menyimpan data secara dalaman, pembolehubah tidak perlu diluluskan dari fungsi berfungsi untuk berfungsi dengan baik.

Juga, kerana banyak contoh kelas yang sama boleh wujud serentak, berurusan dengan set data yang besar adalah jauh lebih mudah. Sebagai contoh, bayangkan anda mempunyai maklumat dua orang yang diproses dalam fail. Mereka memerlukan nama, pekerjaan, dan umur.

Pendekatan Procedural

Berikut adalah pendekatan prosedur kepada contoh kami:

Apabila dilaksanakan, kod output yang berikut:

Walaupun kod ini tidak semestinya buruk, ada banyak yang harus diingat semasa pengekodan. Arus atribut orang terjejas mesti diluluskan dan dikembalikan dari setiap panggilan fungsi, yang meninggalkan margin untuk kesilapan.

Untuk membersihkan contoh ini, adalah wajar untuk meninggalkan beberapa perkara sehingga pembangun mungkin. Hanya maklumat penting untuk operasi semasa perlu diluluskan kepada fungsi.

Di sinilah langkah OOP masuk dan membantu anda membersihkan sesuatu.

Pendekatan OOP

Inilah pendekatan OOP kepada contoh kami:

Ini menghasilkan yang berikut dalam pelayar:

Terdapat sedikit lagi persediaan yang terlibat untuk membuat pendekatan objek berorientasikan, tetapi selepas kelas ditakrifkan, mencipta dan mengubah suai orang adalah mudah; maklumat seseorang tidak perlu diluluskan atau dikembalikan dari kaedah, dan maklumat mutlak hanya diberikan kepada setiap kaedah.

"OOP akan mengurangkan beban kerja anda dengan ketara jika dilaksanakan dengan betul."

Pada skala kecil, perbezaan ini mungkin tidak kelihatan seperti banyak, tetapi apabila aplikasi anda berkembang dalam ukuran, OOP akan mengurangkan beban kerja anda dengan ketara jika dilaksanakan dengan baik.

Petua - Tidak semuanya perlu berorientasikan objek. Fungsi pantas yang mengendalikan sesuatu yang kecil di satu tempat di dalam aplikasi tidak semestinya perlu dibungkus dalam kelas. Gunakan penghakiman terbaik anda apabila memutuskan antara pendekatan berorientasikan objek dan prosedur.

Sebab 2: Pertubuhan yang Lebih Baik

Manfaat lain dari OOP adalah seberapa baik ia memberi pinjaman mudah dan mudah dikemas. Setiap kelas biasanya boleh disimpan dalam failnya sendiri, dan jika konvensyen penamaan seragam digunakan, mengakses kelas sangat mudah.

Anggapkan anda mempunyai aplikasi dengan 150 kelas yang dipanggil secara dinamik melalui fail pengawal pada akar sistem fail permohonan anda. Semua 150 kelas mengikuti konvensyen penamaan class.classname.inc.php dan tinggal di folder inc permohonan anda.

Pengawal boleh melaksanakan fungsi PHP __autoload() untuk menarik secara dinamik kelas-kelas yang diperlukan oleh mereka, dan bukannya termasuk semua 150 dalam fail pengawal sekiranya berlaku atau dengan cara yang bijak termasuk fail dalam kod anda sendiri :

Mempunyai setiap kelas dalam fail berasingan juga membuat kod lebih mudah alih dan mudah digunakan semula dalam aplikasi baru tanpa sekumpulan menyalin dan menampal.

Sebab 3: Penyelenggaraan Mudah

Oleh kerana sifat OOP yang lebih padat apabila dilakukan dengan betul, perubahan dalam kod biasanya lebih mudah dilihat dan dibuat daripada pelaksanaan prosedur spaghetti kod lama.

Sekiranya maklumat tertentu memperolehi atribut baru, sekeping prosedur perisian mungkin memerlukan (dalam senario terburuk) bahawa atribut baru ditambah kepada setiap fungsi yang menggunakan array.

Permohonan OOP berpotensi dikemas kini dengan mudah menambah harta baru dan kemudian menambah kaedah yang menangani harta tersebut.

Banyak faedah yang diliputi dalam seksyen ini adalah produk OOP dalam kombinasi dengan pengaturcaraan pemrograman DRY. Adalah mustahil untuk membuat kod prosedur yang mudah dipelihara yang tidak menyebabkan mimpi buruk, dan sama-sama mungkin untuk membuat kod berorientasikan objek yang mengerikan. [Pro PHP dan jQuery] akan cuba untuk menunjukkan gabungan kebiasaan pengekodan yang baik bersempena dengan OOP untuk menghasilkan kod bersih yang mudah dibaca dan dijaga.

Ringkasan

Pada ketika ini, anda harus berasa selesa dengan gaya pengaturcaraan berorientasikan objek. Pembelajaran OOP adalah cara terbaik untuk mengambil pengaturcaraan anda ke peringkat seterusnya. Apabila dilaksanakan dengan betul, OOP akan membantu anda menghasilkan kod mudah dibaca, mudah dipelihara, mudah alih yang akan menyelamatkan anda (dan pemaju yang bekerja dengan anda) jam kerja tambahan. Adakah anda terjebak pada sesuatu yang tidak diliputi dalam artikel ini? Adakah anda sudah menggunakan OOP dan mempunyai beberapa petua untuk pemula? Berkongsi mereka dalam komen!

Nota Pengarang - Tutorial ini merupakan petikan dari Pro PHP dan jQuery (Apress, 2010).

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.