WP Core Handbook> Standar Pengodean PHP> Konvensi Penamaan menyarankan yang berikut untuk menamai file dengan kelas:
Nama file kelas harus didasarkan pada nama kelas dengan
class-
prepended dan garis bawah pada nama kelas diganti dengan tanda hubung, misalnyaWP_Error
menjadi:class-wp-error.php
Sementara dari kata-kata bagian ini terutama ditujukan untuk penggunaan inti , gaya pengkodean secara keseluruhan umumnya tidak (dan menurut saya) berlaku untuk kode WP pihak ketiga.
Namun karena core tidak mendukung ruang nama (PHP 5.2, ugh) ini tidak menjelaskan kasus tersebut.
Apa cara praktis untuk melakukannya dari sudut pandang kenyamanan pengembang? Dukungan autoloaders?
Saya bisa melihat beberapa cara alternatif:
- mengabaikan namespace sama sekali
- termasuk namespace dalam nama file
- menggunakan ruang nama sebagai level folder
- menggunakan skema penamaan alternatif sama sekali, seperti PSR
oop
coding-standards
Jarang
sumber
sumber
Jawaban:
Pertama, abaikan
class-
awalan. Ini berasal dari pendekatan kode prosedural murni WordPress, kelas digunakan sebagai wadah untuk kode prosedural, bukan untuk objek nyata, dan sebagian besar file tidak mengandung kelas sama sekali atau kelas dan kode lainnya bersamaan. Tidak masuk akal ketika semua file Anda hanya berisi satu kelas dan tidak ada yang lain.Jika Anda akan mengikuti pola itu, Anda harus menggunakan
interface-foo.php
dantrait-bar.php
. Itu tidak hanya terlihat konyol, itu membuat pemuatan otomatis lebih sulit dari yang diperlukan.Cara termudah untuk memisahkan ruang nama dan nama kelas / antarmuka / sifat adalah (berdasarkan pengalaman saya) menugaskan ruang nama untuk nama direktori dan nama kelas ke nama file. Ini membuatnya sangat mudah untuk memetakan kelas yang diminta ke struktur file yang diberikan dalam pemuat otomatis: Konversi
\
ke/
, tambahkan,.php
dan muat file.Ini membuatnya juga mudah untuk me-cache pencarian: untuk setiap direktori / namespace Anda dapat mengambil semua file yang ada saat pertama kali direktori diminta, dan untuk panggilan selanjutnya Anda dapat menggunakan kembali daftar nama file tanpa meminta
file_exists()
setiap kali .sumber
Saya telah membuat kelas untuk persyaratan ini, kompatibel dengan PSR-4 dan mengikuti standar pengkodean Wordpress.
Anda dapat mencapainya di sini: https://github.com/pablo-pacheco/wp-namespace-autoloader
Penjelasannya ada di sana tetapi pada dasarnya itu adalah ketergantungan komposer. Anda hanya perlu mewajibkannya dalam proyek Anda:
Dan kemudian memanggil kelas
sumber
Saya biasanya memilih bagian kedua dari opsi Anda:
Jika Anda menggunakan komposer untuk mendaftarkan autoloader PSR-4 Anda dapat tetap dekat dengan konvensi penamaan WP. Ruang nama dipetakan ke folder yang dapat berisi garis bawah dengan file bernama seperti kelas yang juga bisa berisi garis bawah. Suka:
Ketika WP beralih ke php 5.3+ (itu harus terjadi pada akhirnya, kan ?!) pedoman perlu diperbarui. Karena PSR-0 sudah tidak digunakan lagi, PSR-4 harus paling tidak direkomendasikan jika tidak diperlukan.
sumber
Solusi pablo-sg-pacheco bekerja untuk saya, autoloading bergantung pada komposer namun kompatibel dengan standar pengkodean WordPress, namun url untuk repo Github adalah:
https://github.com/pablo-sg-pacheco/wp-namespace-autoloader
dan nama paketnya adalah:
Akhirnya, Anda juga perlu menambahkan yang berikut ke komposer Anda. Json karena paket itu tidak tersedia di paket:
sumber