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.
/**
* Annframe Class Autoloader.
*
* @package Annframe
* @since 0.1.0
*/
class Annframe_Autoloader {
/**
* Singleton.
*
* @since 0.1.0
* @var Annframe_Autoloader - Single instance.
*/
private static $_instance = null;
/**
* Private Construct.
*
* @package Annframe
* @since 0.1.0
*/
private function __construct() {
spl_autoload_register( array( $this, 'load' ) );
}
/**
* Singleton method.
*
* @package Annframe
* @since 0.1.0
*/
public static function _instance() {
if ( ! self::$_instance ) {
self::$_instance = new Annframe_Autoloader();
}
return self::$_instance;
}
/**
* Class Loader.
*
* @package Annframe
* @since 0.1.0
*
* @param string $class_name - Class name to load.
* @return null - Do not return anything.
*/
public function load( $class_name ) {
$file = str_replace( '_', '-', strtolower( $class_name ) );
$file = 'class-' . $file;
if ( is_readable( trailingslashit( YOUR_PLUGIN_PATH. '/classes-dir' ) . $file . '.php' ) ) {
include_once trailingslashit( YOUR_PLUGIN_PATH. '/classes-dir' ) . $file . '.php';
}
return;
}
}
Annframe_Autoloader::_instance();
Untuk memecah kelas sederhana ini di bagian seperti yang Anda lihat saya menggunakan pola Singleton. Constructor
bersifat pribadi dan instance()
& $_instance
milik pola. Konstruktor memiliki spl_autoload_register
fungsi.
spl_autoload_register( array( $this, 'load' ) );
yang memanggil load
metode dari kelas diri. Dua baris pertama dari metode ini adalah:
$file = str_replace( '_', '-', strtolower( $class_name ) );
$file = 'class-' . $file;
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 gunakan str_replace
untuk mengganti garis bawah dengan garis putus-putus. jadi WPSE_Post
sekarang menjadi wpse-post
. akhirnya menambahkan awalan class-
pada baris berikutnya.
Saya menggunakan is_readable
pernyataan bersyarat yang dapat ditukar dengan file_exists
. dengan asumsi YOUR_PLUGIN_PATH
adalah jalur dasar plugin dan classes-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
/**
* Class autoloader.
*/
if ( ! class_exists( 'Annframe_Autoloader' ) ) {
include_once YOUR_PLUGIN_PATH/class-annframe-autoloader.php';
}
dan kemudian panggil kelas Anda sesuai permintaan.
new XYX_Class();
Another_Class::instance(); // etc
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.
spl_autoload_register()
tanpa efek samping negatif.