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

Autoloading Berorientasikan Objek di WordPress, Bahagian 1

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Object-Oriented Autoloading in WordPress.
Object-Oriented Autoloading in WordPress, Part 2

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

Saya baru-baru ini membungkus satu siri di mana saya meliputi ruang nama dan autoloading di WordPress. Jika anda tidak biasa dengan mana-mana terma di atas, maka saya cadangkan menyemak siri ini.

Intipati apa yang anda boleh harapkan untuk belajar adalah seperti berikut:

Dalam siri ini, kita akan melihat tepat apa ruang nama PHP, mengapa mereka bermanfaat, dan bagaimana menggunakannya. Kemudian kami akan melihat cara menggunakan autoloader untuk memuatkan fail yang kami perlukan secara automatik tanpa perlu memuatkan secara manual dalam kod kami.

Semasa bekerja pada siri ini, secara khusus bahawa autoloader, saya tidak dapat membantu mengenali beberapa bau kod yang sedang diperkenalkan kerana saya berkongsi kod dengan anda.

Ini bukan untuk mengatakan autoloader adalah buruk atau ia tidak berfungsi. Sekiranya anda telah memuat turun pemalam, jalankannya, atau mengikuti dan tulis autoloader anda sendiri, maka anda tahu bahawa ia sebenarnya berfungsi.

Tetapi dalam satu siri yang memberi tumpuan kepada ruang nama-sesuatu yang merupakan sebahagian daripada pengaturcaraan berorientasikan objek-saya tidak dapat membantu tetapi merasa tidak selesa meninggalkan autoloader dalam keadaan akhir di akhir siri ini.

Jangan salah baca: Saya masih berdiri dengan siri ini, apa yang telah diliputi, dan hasil akhir dari apa yang kami hasilkan. Tetapi dari sudut pandangan berorientasikan objek, terdapat lebih banyak kerja yang boleh dilakukan. Jadi dalam siri susulan ini, kita akan mengkaji semula konsep autoloaders dari perspektif pengaturcaraan berorientasikan objek.

Khususnya, kami akan bercakap tentang konsep:

  • antara muka
  • pelaksanaan antara muka
  • prinsip tanggungjawab tunggal
  • dan prinsip dan idea lain yang teras kepada pengaturcaraan berorientasikan objek

Adalah menjadi harapan saya bahawa pada masa yang kita selesaikan siri ini, kita tidak hanya akan mengubah refleksi autoloader kita menjadi sesuatu yang lebih mudah dipelihara dan mudah dibaca, tetapi ia juga mematuhi amalan berorientasikan objek yang lebih besar.

Dengan itu, mari kita mulakan.

Bermula

Seperti hampir setiap jawatan yang saya tulis, saya suka mencuba melakukan dua perkara:

  1. Tentukan peta jalan di mana kita pergi.
  2. Beri anda semua yang anda perlu tahu untuk mendapatkan mesin anda dan berjalan.

Sebelum kita melompat apa-apa kod, mari kita lakukannya sekarang.

Ralat Jalan Kami

Dalam dua jawatan yang akan datang, kami akan melihat beberapa konsep berorientasikan objek yang akan membolehkan kami memperbaiki plugin yang kami bina dalam siri sebelumnya.

Jika anda tidak mempunyai salinan plugin itu, maka anda boleh memuat turun salinannya; Walau bagaimanapun, saya akan berkongsi contoh kod lengkap, komen, dan penjelasan di setiap tutorial.

Siri ini akan mengandaikan anda tidak mengetahui apa-apa tentang konsep yang akan kita bincangkan sehingga kita akan bermula dari bawah. Apa yang anda perlukan adalah mempunyai perisian yang mencukupi pada mesin anda untuk mendapatkan salinan WordPress dan berjalan, dan editor di mana anda boleh mengedit kod.

Apa yang anda perlukan

Untuk memulakan, anda memerlukan alat berikut:

Selepas anda mempunyai semua itu di tempat (dan saya tahu ia kelihatan seperti banyak, tetapi ia tidak mengambil masa yang lama untuk ditetapkan), anda perlu memasang salinan plugin yang dipautkan di atas.

Sebaik sahaja selesai, kami bersedia untuk bercakap tentang antara muka dan prinsip tanggungjawab tunggal.

Antara muka yang Ditakrifkan

Bergantung pada latar belakang anda dalam perisian, apabila anda mendengar perkataan "interface," anda mungkin akhirnya memikirkan apa yang sebenarnya pengguna lihat pada skrin. Anda tahu: Antara muka pengguna.

Tetapi apabila ia datang kepada reka bentuk berorientasikan objek, itu bukan apa yang kita bicarakan sama sekali. Sebaliknya, kita bercakap tentang antara muka kelas. Dan ini biasanya boleh digambarkan sebagai kelas dan kaedah awam ia mendedahkan untuk kelas-kelas lain untuk berkomunikasi dengannya.

Adakah definisi yang lebih formal? Pasti Wikipedia menawarkan satu:

Dalam pengkomputeran, antara muka adalah sempadan bersama di mana dua komponen berasingan dari sistem pertukaran maklumat komputer.

Ini bukan yang buruk, sebenarnya. Ia cukup umum untuk memohon kepada hampir mana-mana bahasa pengaturcaraan, dan ia tidak begitu teknikal yang kita tidak dapat memahaminya.

Kemudian sekali lagi, kami sedang bekerja dengan PHP. Oleh itu, apakah manual PHP yang ditawarkan pada topik itu?

Antara muka objek membolehkan anda membuat kod yang menentukan kaedah mana kelas mesti dilaksanakan, tanpa perlu menentukan bagaimana kaedah ini dikendalikan.

Pada pendapat saya, ini adalah definisi yang sangat baik. Ia mudah. Ini bahasa agnostik (untuk pengetahuan saya), dan ia berfungsi dengan baik di kebanyakan (jika tidak semua) bahasa berorientasi objek. Manual itu juga berkata:

Antara muka ditakrifkan dengan cara yang sama seperti kelas, tetapi dengan kata kunci antara muka menggantikan kata kunci kelas dan tanpa sebarang kaedah yang telah ditentukan oleh kandungannya.
Semua kaedah yang diisytiharkan dalam antara muka mestilah terbuka; ini adalah jenis antara muka.

Ini adalah dua perkara yang perlu kita ingat jika kita akan melaksanakan antara muka kita sendiri, terutamanya ketika datang ke plugin ini. Iaitu, kita perlu ingat yang berikut:

  1. Kita menentukan antara muka yang sama seperti kita melakukan kelas, tetapi kita menggunakan kata kunci antara muka.
  2. Kaedah-kaedah yang ditakrifkan dalam antara muka mempunyai orang awam (yang bertentangan dengan yang dilindungi atau swasta) kerana ini adalah apa yang menjamin fungsi yang boleh diakses oleh kelas-kelas lain.

Sebelum kita melangkah lebih jauh, apa yang mungkin kelihatan antara muka dalam projek WordPress? Berikut adalah contoh dari projek yang saya sedang kerjakan:

Kod di atas mestilah jelas mengenai tujuannya, terutamanya memandangkan komen yang terletak di atas antara muka.

Seperti yang kita semua tahu, WordPress boleh mendaftar dan mencipta dua jenis aset: stylesheet dan fail JavaScript.

Oleh kerana kedua-duanya adalah aset, maka ia akan menjadi alasan bahawa apabila kita membuat kelas untuk pengurusan stylesheet atau pengurusan JavaScript, kita umumkan ia sebagai antara muka aset, bukan?

Tambahan pula, kita tahu bahawa kita mahu memulakan fail dengan menggunakan kaedah init supaya kita boleh menyambungkan fungsi enqueue yang ditentukan ke fungsi API WordPress yang sesuai. Sebagai alternatif, mungkin terdapat beberapa kerja lain yang anda ingin lakukan, dan jika itu berlaku, maka anda mungkin mahu menambah tandatangan kaedah lain ke antara muka.

Walau apa pun keadaannya, mana-mana kelas yang melaksanakan antara muka ini mesti menyediakan fungsi untuk kaedah berikut. Jadi apa yang akan dilakukan oleh kelas yang menerapkan antara muka ini?

Berikut adalah contoh yang sangat mudah dalam kelas yang menambah stylesheets ke kawasan pentadbiran WordPress:

Sekarang bagaimana ini diterapkan dan dikuatkuasakan melalui PHP adalah di luar skop tutorial ini. Kita akan melihatnya lebih banyak apabila kita mula menguraikan autoloader kita.

Tetapi titik yang saya cuba tunjukkan ialah antara muka yang mentakrifkan kaedah awam kelas mesti dilaksanakan. Ia tidak menentukan pelaksanaannya, tetapi ia menjamin bahawa satu set fungsi tertentu akan wujud dan dapat diakses secara terbuka kepada kelas pihak ketiga.

Prinsip Tanggungjawab Tunggal

Salah satu cabaran untuk bercakap tentang prinsip tanggungjawab tunggal adalah bahawa ia sering disalahpahami sebagai maksud seperti:

Kelas (atau fungsi atau rutin) harus melakukan satu dan satu perkara sahaja.

Tetapi itu sedikit keliru, bukan? Maksud saya walaupun mudah untuk gelung tidak lebih dari satu perkara: Ia memulakan nilai, membandingkan nilai-nilai, dan kemudian melaraskan nilai apabila badan gelung selesai.

Sebaliknya, prinsipnya menyatakan yang berikut:

Kelas hanya mempunyai satu sebab untuk berubah.

Kerana begitu banyak daripada kita pemaju memanfaatkan Google untuk membantu kita dalam kerja sehari-hari kita, saya fikir penting untuk memahami sumber idea ini. Itulah, ini berasal dari Uncle Bob Martin, kerana dia terkenal, atau Robert Martin, yang telah menulis beberapa buku pengaturcaraan atas.

Idea kelas yang mempunyai satu sebab untuk berubah membawa ia pelbagai implikasi, bukan? Berikut adalah satu contoh yang datang kepada minda dari autoloader kami seperti sekarang.

Mari mengkaji semula kod itu (dan saya tahu ia bukan kelas, itu fungsi, tetapi prinsipnya boleh digunakan):

Terdapat banyak perkara yang berlaku dalam fungsi ini. Hanya melihatnya dari tahap yang tinggi, kita dapat melihat bahawa ia melakukan perkara-perkara berikut:

  • Ia menentukan sama ada PHP cuba untuk menggunakan kod dalam fungsi ini.
  • Fungsi menentukan jika kita memuatkan antara muka atau kelas.
  • Autoloader kemudian cuba menyertakan fail atau ia membuang ralat.

Sekiranya kelas sepatutnya hanya mempunyai satu sebab untuk berubah, terdapat tiga sebab di atas (dan itu hanya pada tahap yang tinggi) di mana fungsi tunggal ini boleh berubah. Selain itu, kod itu juga boleh menjadi lebih jelas.

Saya bukan seorang yang menghindar dari komen kod, tetapi terdapat banyak penjelasan yang berlaku dalam kod di atas. Dan tidak mengapa apabila anda mula menulis autoloader, tetapi apabila anda menuju ke wilayah yang lebih maju seperti yang kita ada, maka itu tidak akan memegang lebih banyak seni bina yang ketat.

Membawa Dua Bersama

Inilah di mana antara muka dan prinsip tanggungjawab tunggal dapat berfungsi dengan tangan.

Sama seperti antara muka menyediakan satu set tandatangan fungsi (atau kontrak) untuk apa yang akan disediakan oleh pelaksananya, ia dapat memastikan bahawa mana-mana kelas yang melaksanakan antara muka itu mematuhi dengan ketat apa yang ditetapkannya.

Tetapi ini menimbulkan persoalan yang menarik: Sekiranya kita mempunyai banyak antaramuka? Dan jawapannya ialah ia bergantung kepada sifat penyelesaian yang anda cuba buat.

Dalam kes kita, saya fikir ia masuk akal.

Lagipun, kami sedang mencari untuk memeriksa nama kelas yang masuk dan menentukan sama ada antara muka atau kelas, atau jika ia sepatutnya membuang ralat. Selain itu, kami sedang mencari untuk memastikan bahawa fail yang betul dimasukkan bersama seluruh sistem.

Tetapi itu melangkaui topik tutorial khusus ini dan kita perlu meneroka dengan lebih mendalam apabila tiba masa untuk menulis lebih banyak kod.

Kesimpulan

Pada ketika ini, kami telah merangkumi konsep-konsep yang perlu supaya kita boleh mula menguraikan autoloader kami. Iaitu, kami akan memperkenalkan antara muka, memastikan kod kami mematuhinya, dan kemudian kami akan memastikan kelas (atau kelas) kami dan kaedah masing-masing mematuhi prinsip tanggungjawab tunggal.

Selain itu, kami akan memastikan bahawa ia terus berfungsi dengan baik dalam konteks pemalam, ia didokumenkan dengan betul, dan ia mengikuti Standard Pengekodan WordPress.

Sementara itu, jika anda berminat untuk membaca lebih lanjut mengenai pengaturcaraan berorientasikan objek dalam konteks WordPress, anda boleh mencari semua tutorial saya sebelum ini di halaman profil saya. Jangan ragu untuk mengikuti saya di blog saya atau ikuti saya di Twitter di mana saya sering bercakap tentang kedua-dua.

Seperti biasa, jika anda mencari utiliti lain untuk membantu anda membina set alat anda yang semakin berkembang untuk WordPress atau kod contoh untuk belajar dan menjadi lebih mahir dalam WordPress, jangan lupa untuk melihat apa yang kami ada di Envato Market .

Dengan itu, tutorial seterusnya dalam siri ini akan menjadi lebih praktikal. Iaitu, kami akan menulis kod, menguraikan kod sedia ada, dan memohon semua yang kami pelajari dalam tutorial ini. Sehingga itu, jangan teragak-agak untuk meninggalkan apa-apa maklum balas dalam komen.

Sumber

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.