Ketika saya menggunakan spl_autoload_register di plugin saya, saya mendapatkan:
Fatal error: Uncaught exception 'LogicException' with message
'Class wp_atom_server could not be loaded'
wp-includes\pluggable-deprecated.php on line 182
Saya membaca dan menemukan berbagai perbaikan. Satu di SO mengatakan untuk tidak menggunakan spl_autoload_register dengan WordPress.
Apakah itu akurat?
Saya yakin saya dapat menemukan "perbaikan" untuk kesalahan, tetapi saya tidak yakin saya ingin melakukan itu dengan setiap rilis WP.
Jika saya tidak menggunakan fungsi autoload, bagaimana saya harus memuat kelas saya? Inilah yang istirahat sekarang:
spl_autoload_extensions(".php");
spl_autoload_register();
use MyPluginClasses\Student as MS;
$student = new MS\Student();
echo $student->sayHello();
Dalam siswa:
<?PHP
namespace MyPluginClasses\Student
{
class Student{
public function __Construct(){
echo "Hello Johnny";
}
public function sayHello(){
echo "Hello Johnny's Method";
}
}
}
Desain ini berfungsi dengan baik di luar WordPress.
php
plugin-development
errors
johnny
sumber
sumber
spl_autoload_register()
tanpa efek samping negatif.glob()
direktori sekali, lalu mengirimkan kelas ketika mereka diperlukan perspl_autoload_register()
.Jawaban:
Saya benar-benar tidak yakin apakah itu praktik yang baik atau buruk untuk memuat kelas secara otomatis di plugin WP. Bagi saya, saya tidak melihat efek samping dari penggunaan
spl_autoload_register
(kinerja tidak diuji)Jadi untuk menjawab pertanyaan Anda, saya ingin membagikan kelas dari plugin saya yang akan datang yang saya gunakan untuk memuat kelas secara otomatis dari satu direktori tanpa masalah dan sejauh ini tidak ada gunanya bagi saya.
Untuk memecah kelas sederhana ini di bagian seperti yang Anda lihat saya menggunakan pola Singleton.
Constructor
bersifat pribadi daninstance()
&$_instance
milik pola. Konstruktor memilikispl_autoload_register
fungsi.yang memanggil
load
metode dari kelas diri. Dua baris pertama dari metode ini adalah:yang cukup lurus. jika Anda mengikuti WPCS itu mendorong Anda untuk mengikuti konvensi penamaan kelas yang diawali dengan kelas kata dan kemudian nama kelas. ofcourse setiap garis bawah (_) diganti dengan tanda hubung (-).
jadi nama file kelas
WPSE_Post
akan menjadiclass-wpse-post.php
Nama kelas casing bawah dengan
strtolower
dan gunakanstr_replace
untuk mengganti garis bawah dengan garis putus-putus. jadiWPSE_Post
sekarang menjadiwpse-post
. akhirnya menambahkan awalanclass-
pada baris berikutnya.Saya menggunakan
is_readable
pernyataan bersyarat yang dapat ditukar denganfile_exists
. dengan asumsiYOUR_PLUGIN_PATH
adalah jalur dasar plugin danclasses-dir
berada di bawah dir plugin utama yang menahan semua kelas Anda yang membutuhkan autoloading.include_once
digunakan untuk memuat file aktual saat panggilan.Pemakaian:
Anda hanya perlu memasukkan kelas pemuat otomatis di atas dalam file dasar plugin Anda
dan kemudian panggil kelas Anda sesuai permintaan.
Catatan: Saya tidak menggunakan metode namespace dalam solusi saya sehingga mungkin cocok atau tidak sesuai dengan kebutuhan Anda, tetapi diposting di sini dengan harapan bahwa seseorang setidaknya mendapatkan manfaat dari memuat kelas secara dinamis.
sumber
sumber