WP eklentisindeki sınıfları otomatik olarak yüklemenin iyi ya da kötü bir uygulama olup olmadığından gerçekten emin değilim. Benim için kullanmanın hiçbir yan etkisi görmüyorum spl_autoload_register
(test edilmemiş performans)
Sorunuzu cevaplamak için, herhangi bir sorun olmadan tek bir dizinden sınıfları otomatik olarak yüklemek için kullanacağım yaklaşan eklentimden bir sınıf paylaşmak istiyorum ve şimdiye kadar benim için iyi.
/**
* 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();
Gördüğünüz gibi parçalar halinde bu basit sınıf kırmak için ben Singleton desen kullanıyorum. Constructor
özel ve instance()
& $_instance
desen aittir. Yapıcı spl_autoload_register
işlevi vardır.
spl_autoload_register( array( $this, 'load' ) );
load
kendi kendini sınıftan çağıran yöntemdir. Bu yöntemin ilk iki satırı şöyledir:
$file = str_replace( '_', '-', strtolower( $class_name ) );
$file = 'class-' . $file;
ki bu oldukça düzdür. WPCS'yi izlerseniz , word sınıfı ve ardından sınıf adıyla ön eklenmiş bir sınıf adlandırma kuralını izlemenizi önerir . Tabii ki herhangi bir alt çizgi (_), (-) tire ile değiştirilir.
böylece sınıfın bir dosya adı WPSE_Post
olurduclass-wpse-post.php
Alt kasa sınıf adlarını, alt çizgileri tire işaretleri ile değiştirmek strtolower
ve kullanmak str_replace
için kullanın. böylece WPSE_Post
şimdi olur wpse-post
. son olarak bir class-
sonraki satıra bir önek ekler .
is_readable
ile değiştirilebilir koşullu deyimde kullanıyorum file_exists
. varsayalım YOUR_PLUGIN_PATH
eklentinin temel yolu ve classes-dir
otomatik yükleme gerektiren tüm sınıfları tutan ana eklenti dir altında.
include_once
çağrı sırasında gerçek dosyayı yüklemek için kullanılır.
Kullanımı:
eklentinizin temel dosyasına yukarıdaki otomatik yükleyici sınıfını eklemeniz yeterlidir
/**
* Class autoloader.
*/
if ( ! class_exists( 'Annframe_Autoloader' ) ) {
include_once YOUR_PLUGIN_PATH/class-annframe-autoloader.php';
}
ve talep üzerine sınıflarınızı arayın.
new XYX_Class();
Another_Class::instance(); // etc
Not: Çözümümde ad alanı yöntemini kullanmıyorum, bu yüzden ihtiyaçlarınıza göre uygun olabilir veya olmayabilir, ancak en azından birinin dinamik olarak sınıfları yükleme avantajlarından yararlanmasını umuyoruz.
spl_autoload_register()
olumsuz yan etkiler olmadan kullanabilirsiniz .