ডাব্লুপি প্লাগইনে অটো লোডিং ক্লাসগুলি ভাল বা খারাপ অনুশীলন কিনা তা আমি সত্যিই নিশ্চিত নই। আমার জন্য, আমি ব্যবহারের কোনও পার্শ্ব প্রতিক্রিয়া দেখতে পাচ্ছি না spl_autoload_register
(পরীক্ষামূলক পারফরম্যান্স নয়)
সুতরাং আপনার প্রশ্নের উত্তর দেওয়ার জন্য, আমি আমার আসন্ন প্লাগইন থেকে একটি ক্লাস ভাগ করতে চাই যা আমি কোনও সমস্যা ছাড়াই একটি ডিরেক্টরি থেকে অটো লোড ক্লাস করতে ব্যবহার করছি এবং এটি আমার পক্ষে এখনও পর্যন্ত ভাল।
/**
* 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();
এই সাধারণ ক্লাসটিকে ভাঙার জন্য যেমন আপনি দেখতে পাচ্ছেন আমি সিঙ্গলটন প্যাটার্নটি ব্যবহার করছি। Constructor
ব্যক্তিগত এবং instance()
& $_instance
নিদর্শন অন্তর্ভুক্ত। কনস্ট্রাক্টরের spl_autoload_register
কাজ রয়েছে।
spl_autoload_register( array( $this, 'load' ) );
যা load
স্ব শ্রেণীর থেকে পদ্ধতি কল করছে । এই পদ্ধতি থেকে প্রথম দুটি লাইন হ'ল:
$file = str_replace( '_', '-', strtolower( $class_name ) );
$file = 'class-' . $file;
যা বেশ সোজা। আপনি যদি ডাব্লুপিসিএস অনুসরণ করেন তবে এটি আপনাকে ক্লাসের নামকরণ কনভেনশন শব্দের শ্রেণীর সাথে এবং তার পরে শ্রেণীর নামের সাথে অনুসরণ করতে উত্সাহিত করবে । অবশ্যই কোনও আন্ডারস্কোর (_) এর সাথে (-) ড্যাশ প্রতিস্থাপন করা হয়েছে।
ক্লাসের একটি ফাইল নাম WPSE_Post
হবেclass-wpse-post.php
নিম্ন কেসিং ক্লাসের নামগুলি ড্যাশগুলির সাথে আন্ডারস্কোরগুলি প্রতিস্থাপন করতে strtolower
এবং ব্যবহার করে str_replace
। তাই WPSE_Post
এখন হয়ে যায় wpse-post
। অবশেষে class-
পরের লাইনে একটি উপসর্গ যুক্ত করুন।
আমি is_readable
শর্তাধীন বিবৃতি ব্যবহার করছি যা এর সাথে বিনিময়যোগ্য file_exists
। ধরে YOUR_PLUGIN_PATH
নেওয়া প্লাগইন এর বেস পাথ এবং classes-dir
মূল প্লাগইন ডিয়ারের অধীনে আপনার সমস্ত ক্লাসের অধীনে রয়েছে যেখানে অটোলয়েডিং দরকার।
include_once
কল এ আসল ফাইল লোড করতে ব্যবহৃত হয়।
ব্যবহার:
আপনাকে কেবলমাত্র আপনার প্লাগইনের বেস ফাইলটিতে উপরের অটো লোডার শ্রেণি অন্তর্ভুক্ত করতে হবে
/**
* Class autoloader.
*/
if ( ! class_exists( 'Annframe_Autoloader' ) ) {
include_once YOUR_PLUGIN_PATH/class-annframe-autoloader.php';
}
এবং তারপরে আপনার ক্লাসগুলিকে কল করুন।
new XYX_Class();
Another_Class::instance(); // etc
দ্রষ্টব্য: আমি আমার সমাধানে নেমস্পেস পদ্ধতিটি ব্যবহার করছি না তাই এটি আপনার প্রয়োজন অনুসারে উপযুক্ত হতে পারে বা নাও পারে তবে এই পোস্টে এই পোস্টে পোস্ট করা হয়েছে যে কমপক্ষে কেউ গতিশীলভাবে ক্লাস লোড করার সুবিধা পাবে।
spl_autoload_register()
নেতিবাচক পার্শ্ব-প্রতিক্রিয়া ছাড়াই ব্যবহার করতে পারেন ।