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

Menggunakan Ruang Nama dan Autoloading dalam Plugin WordPress, Bahagian 3

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called Using Namespaces and Autoloading in WordPress Plugins.
Using Namespaces and Autoloading in WordPress Plugins, Part 2
Using Namespaces and Autoloading in WordPress Plugins, Part 4

Malay (Melayu) translation by Umar bin Abdul Aziz (you can also view the original English article)

Dalam tutorial ini, kami akan berehat dari kod menulis dan melihat apa yang dimaksudkan dengan ruang nama dan autoloader di PHP, bagaimana ia berfungsi, dan mengapa ia berguna. Kemudian kami akan menyediakan untuk menyelesaikan siri ini dengan menggunakannya dalam kod.

Sekiranya anda tidak mengikuti semua perkara yang telah dibincangkan dalam siri ini, saya cadangkan untuk kembali dan semak semula apa yang telah dibincangkan. Sekurang-kurangnya, tinjau artikel sebelumnya kerana ia akan meletakkan asas untuk apa yang akan kita bincangkan dalam dua artikel yang akan datang.

Sekarang anda telah melakukannya, anda tahu apa plugin yang kami kerjakan, apa yang mereka lakukan, dan bagaimana ia berfungsi. Seterusnya, anda perlu menyediakan persekitaran pembangunan tempatan yang membolehkan anda bekerja dengan kod sumber. Jika tidak, inilah gambaran ringkas tentang semua perkara yang anda perlukan:

  • Persekitaran pembangunan tempatan yang merangkumi PHP 5.6.20, pelayan web Apache, dan pelayan pangkalan data MySQL.
  • Direktori dari mana WordPress 4.6 sedang dihoskan.
  • Editor teks atau IDE pilihan anda yang anda gunakan untuk menulis plugin.
  • Pengetahuan API Plugin WordPress.

Dengan mengandaikan bahawa anda mempunyai semua yang dipasang, siap, dan bersedia mengikuti versi terkini plugin, maka kami bersedia meneruskan perbincangan kami di ruang nama, autoloading, dan WordPress.

Di Namespaces dan Autoloading

Bagi mereka yang telah bekerja dalam bahasa pengaturcaraan moden yang lain, anda mungkin terbiasa dengan konsep ruang nama. Tetapi walaupun anda telah bekerja dengan PHP, kemungkinannya anda telah melihat semuanya, sekurang-kurangnya dalam konteks WordPress.

Bagi anda yang belum pernah mendengarnya atau yang telah mendengarnya tetapi tidak menggunakannya, itulah sebabnya artikel ini dibuat. Khususnya, kami akan bercakap tentang ruang nama dan autoloading dan kemudian, dalam tutorial seterusnya, kita akan melihat bagaimana semuanya sesuai.

Iaitu, kami akan mengambil kerja yang telah kami lakukan dengan plugin kami setakat ini dan kemudian mengemas kininya supaya menggunakan ruang nama dan autoloading. Ini akan memberi anda pemahaman praktikal tentang konsep serta beberapa alat baru untuk menambah repertoire pembangunan anda semasa anda bekerja pada projek anda yang seterusnya.

Apakah ruang nama?

Seperti kebanyakan tutorial saya, saya ingin memberi takrifan rasmi dan kemudian memecah mereka menjadi lebih banyak istilah perbualan. Manual PHP mentakrifkan ruang nama seperti ini :

Dalam ruang nama definisi yang paling meluas ialah bagaimana untuk mengemas barang.

Ia tidak selalu membantu kita, adakah ia? Orang boleh berpendapat bahawa kelas melakukan perkara yang sama yang membolehkan sifat dan fungsinya menjadi umum sebagai item. Tetapi manual itu terus:

Ruang nama PHP menyediakan cara untuk kelas kumpulan, antara muka, fungsi dan pemalar yang berkaitan.

Itu sedikit lebih jelas? Ini bermakna bahawa apabila kita mempunyai kumpulan kelas yang berkaitan, kita boleh mengelompokkannya dalam direktori yang sama atau direktori serupa dalam sistem fail, tetapi tidak ada cara untuk mengetahui bahawa dengan melihat kod tersebut.

Ruang nama memberi kita kemampuan untuk melakukan itu.

Fikirkannya dengan cara ini: Bayangkan anda mempunyai satu set fungsi yang berkaitan dengan bekerja dengan CSV.

  • Mungkin anda mempunyai kelas yang bertanggungjawab untuk membaca fail CSV, menguraikan kandungan, dan membaca kandungan ke dalam array.
  • Kemudian anda mempunyai kelas yang bertanggungjawab untuk mendapatkan array dan menulis data ke pangkalan data berdasarkan apa yang mengandungi array.
  • Selepas itu, terdapat kelas yang bertanggungjawab untuk membaca pilihan apabila objek pihak ketiga atau kawasan lain dalam kod perlu membaca data yang telah dibaca, diolah dan disimpan terlebih dahulu dalam pelaksanaan projek.

Kesemua fungsi ini perlu mengandungi pelbagai kelas. Bergantung kepada cara berorientasikan objek kod anda, anda juga boleh mempunyai satu set antara muka yang diterapkan oleh kelas anda. Selain itu, kelas boleh ditetapkan dalam direktori /csv tetapi dipecah lagi ke dalam subdirektori mereka sendiri.

  • /read
  • /write

Mungkin anda akan memilih untuk menetapkan struktur sedikit berbeza, tetapi untuk memastikan perbincangan semudah mungkin, saya rasa ia masuk akal. Jadi mungkin kelas antara muka akan berada dalam direktori root /csv , pembaca akan berada di direktori /read , dan kelas yang bertanggungjawab untuk menulis data ke pangkalan data akan berada di direktori /tulis .

Tiada apa yang saya katakan setakat ini adalah luar biasa dari segi bagaimana kita boleh menguruskan arkib kami. Tetapi di sinilah ruang nama dimainkan.

Khususnya, bagaimana jika kita boleh menguruskan kelas kami supaya mereka juga dipetakan ke lokasi fizikal mereka pada sistem fail?

Fikirkannya dengan cara ini: Katakan plugin anda dipanggil Acme CSV, dan kelas di atas semuanya teratur dalam direktori dan subdirektori mereka dan sebagainya. Apakah ruang nama untuk kelas-kelas ini, dan bagaimana mereka boleh dinyatakan dalam projek ini?

Lihatlah apa yang akan kita sebut kelas Parser . Kelas ini terletak di /csv/read .

Dan kemudian katakan kami mempunyai kelas kami yang menulis data ke pangkalan data:

Akhirnya, mari kita lihat ruang nama untuk kelas membaca dari pangkalan data:

Tidak ada yang sangat rumit, bukan? Walaupun piawaian di atas bukanlah bagaimana anda harus mengatur fail anda, saya ingin cuba memetakan kelas saya ke lokasi mereka pada cakera. Ini memudahkan untuk merujuk kepada kerja yang boleh dilakukan kemudian.

Pada ketika ini, tidak ada lagi yang dapat dilihat daripada mengisytiharkan jenis menganjurkan kelas anda di bahagian atas fail mereka. Tetapi apabila anda mula memasuki autoloading, semuanya berubah.

kata di dalam packages dan subpackages

Sebelum kita bercakap mengenai autoloading, saya ingin melakukan penyelewengan ringkas pada tag @package dan @subpackage yang sering kita gunakan untuk melihat dalam fail komen.

Sebagai contoh, anda mungkin melihat sesuatu seperti ini berkaitan dengan kod kami di atas:

Tetapi apabila anda merujuk kepada dokumentasi phpDocumentor , anda akan melihat perkara berikut mengenai @subpackage :

Teg ini dianggap usang dan boleh dikeluarkan dalam versi phpDocumentor masa depan. Adalah disyorkan untuk menggunakan keupayaan tag @package untuk menyediakan pelbagai peringkat.

Jadi @subpackage tidak lagi sah, bermakna kita mungkin tidak perlu menggunakannya lagi. Bagaimana dengan tag @package ?

Tag @package digunakan untuk mengkategorikan Unsur Struktur ke dalam subbahagian logik.

Sokongan untuk tahap bersarang kini hanya dalam tag. Baik untuk tahu, kan? Ini bermakna kod yang kita lihat di atas boleh ditulis seperti ini:

Pasti, ini satu contoh mudah, tetapi penting. Saya menyebutnya kerana @subpackage adalah tag lain yang sering kita lihat dalam PHP berasaskan WordPress yang perlu kita hindari jika kita mahu mula menggunakan piawaian yang lebih baru.

Apa itu Autoloading?

Dengan mengatakan itu, mari kita kembali kepada topik utama yang wujud. Oleh kerana kita telah selesai dengan ruang nama, mari kita lihat autoloading. Menurut manual PHP:

Ramai pemaju yang menulis aplikasi berorientasikan objek menjadikan satu fail sumber PHP setiap definisi kelas. Salah satu gangguan terbesar ialah menulis senarai panjang yang diperlukan termasuk pada permulaan setiap skrip (satu untuk setiap kelas).

Ini tidak boleh dikatakan lebih baik, bukan? Namun, ia tidak semestinya menjelaskan apa autoloadingnya. Ini hanya menjelaskan masalah yang dapat diatasi.

Dalam PHP 5, ini tidak diperlukan lagi ... [ia menyokong pemuatan] kelas dan antara muka untuk dimuat secara automatik jika tidak ditakrifkan pada masa ini.

Bunyi hebat, bukan? Tetapi ada amaran, dan kami akan meneroka secara terperinci dalam tutorial seterusnya. Tetapi sehingga itu, di sini adalah: Untuk mendapatkan fungsi ini, kita perlu melaksanakan fungsi yang mengetahui di mana hendak mencari fail yang dimuatkan dan bagaimana untuk mengurai struktur direktori fail tersebut.

Bunyi membosankan, dan beberapa kes mungkin berlaku, tetapi jika anda mempunyai cara yang konsisten untuk mengatur kerja anda, kod autoloading anda boleh menjadi mudah alih. Iaitu, anda boleh mengambil fungsi yang anda tulis, masukkannya ke dalam projek berasaskan PHP, dan bersedia untuk melakukan semua perkara yang sama.

Tetapi tutorial khusus ini bukan tentang menulis kod. Ini mengenai pemahaman idea di sebalik kod konsep yang akan kami laksanakan dalam tutorial seterusnya.

Kenapa Semua Ini Penting?

Bergantung pada siapa yang anda minta, anda boleh melihat ruang nama dan autoloading seperti sesuatu yang baru dalam PHP. Bagi sesetengah orang, ini benar. Bagi yang lain, mereka telah bekerja dengan dua konsep ini terlebih dahulu.

Salah satu perkara tentang WordPress yang boleh menyimpannya daripada mengadaptasi ciri PHP yang lebih baru adalah komitmennya untuk keserasian ke belakang. Ini tidak semestinya sesuatu yang baik atau buruk - ia adalah sifat aplikasi.

Tetapi sejak WordPress mempunyai versi PHP yang minimum ia menggunakan, ciri bahasa yang lebih baru tidak selalu diterima pakai. Dan apabila versi minimum diguna pakai, ia memerlukan beberapa pemaju khas WordPress untuk mula menggunakan ciri ini dalam kod mereka.

Dan itu bukan perkara yang buruk. Singkatnya, aplikasi pemaju menyesuaikan dengan kelajuan apabila mereka matang.

Tetapi sebagai WordPress terus bergerak maju atau anda mempunyai kawalan ke atas persekitaran di mana projek anda berjalan, anda mungkin berminat untuk mengadaptasi beberapa ciri bahasa yang anda tidak tahu ada atau sebelum ini anda tidak tahu apa yang tersedia.

Ruang nama dan autoloading adalah dua ciri kuat bahasa yang boleh digunakan untuk menjadikan kod ini lebih mudah dibaca, lebih teratur, dan bahkan lebih mudah dikendalikan. Jadi jika anda tidak menggunakannya dalam kerja anda di WordPress, terutama jika anda bekerja dengan plugin WordPress, maka saya menggalakkan anda untuk menganggapnya.

Kesimpulannya

Ruang nama memberikan kita keupayaan untuk mengatur kod kami dengan cara yang menjadikan pengelompokan logik kelas yang berkaitan lebih mudah. Selain itu, autoloading memberikan kod lebih mudah dibaca dengan mengurangkan bilangan include , include_once , require , atau require_once perlu kita gunakan.

Ini menjadikan kod sumber yang kita tulis lebih jelas kerana ia hanya menumpukan kepada logik bahawa ia bertanggungjawab untuk, tanpa perlu melakukan sesuatu seperti fail import, mengendalikan pelbagai struktur direktori, dan menyedari lebih daripada yang sepatutnya (apalagi Pembangun harus terus taip semula segala-galanya boleh mengakses fail itu).

Dan bagi mereka yang ingin memastikan struktur kod mereka mengikuti struktur organisasi fail dan direktori pada cakera, ini memberi kita keupayaan untuk menyusun projek kami dengan cara itu.

Walaupun dengan semua itu, ini hanya satu cara dan beberapa kelebihan ruang nama dan autoloading. Lebih banyak topik dilindungi dalam manual PHP dan projek sumber terbuka lain yang saya cadangkan anda semak jika anda mempunyai masa.

Dalam tutorial seterusnya, kami akan menyelesaikan siri ini dengan menggunakan apa yang telah kami pelajari dalam tutorial ini apabila kami memperkenalkan ruang nama dan autoloading kepada plugin Wordpress kami. Sehingga itu, jika anda mencari bahan berkaitan WordPress yang lain, anda boleh mencari semua tutorial sebelumnya pada halaman profil saya dan anda boleh mengikuti saya di blog atau Twitter saya .

Jangan ragu untuk meninggalkan apa-apa soalan yang anda ada mengenai ruang nama, autoloading, atau bentuk WordPress di bawah.

Sumber

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.