ঠিক আছে, আমার দুটি বড় প্রকল্প হয়েছিল যেখানে আমি নামস্থান এবং অটোলয়েডিংয়ের উপর নির্ভর করার জন্য পর্যাপ্ত সার্ভারের নিয়ন্ত্রণে ছিলাম।
প্রথম আপ। অটোলয়েডিং দুর্দান্ত। প্রয়োজনের বিষয়ে চিন্তা না করা একটি তুলনামূলক ভাল জিনিস।
আমি কয়েকটি প্রকল্পে একটি লোডার ব্যবহার করছি। ক্লাসটি প্রথমে বর্তমান নেমস্পেসে রয়েছে কিনা তা পরীক্ষা করে পরীক্ষা করে দেখুন, তারপরেও যদি জামিন হয় না। সেখান থেকে ক্লাসটি সন্ধান করার জন্য কিছু স্ট্রিং ম্যানিপুলেশন।
<?php
spl_autoload_register(__NAMESPACE__ . '\\autoload');
function autoload($cls)
{
$cls = ltrim($cls, '\\');
if(strpos($cls, __NAMESPACE__) !== 0)
return;
$cls = str_replace(__NAMESPACE__, '', $cls);
$path = PLUGIN_PATH_PATH . 'inc' .
str_replace('\\', DIRECTORY_SEPARATOR, $cls) . '.php';
require_once($path);
}
নাম স্পেস ছাড়াই সহজেই এটি ব্যবহারের জন্য সহজেই মানিয়ে নেওয়া যায়। ধরে নিলে আপনি আপনার প্লাগইন / থিমের ক্লাসগুলি অভিন্নভাবে উপসর্গ করেছেন, আপনি কেবলমাত্র সেই উপসর্গের জন্য পরীক্ষা করতে পারবেন। তারপরে ডিরেক্টরি বিভাজকগুলির স্থানধারক হিসাবে শ্রেণীর নামে আন্ডারস্কোর ব্যবহার করুন। আপনি যদি অনেকগুলি ক্লাস ব্যবহার করে থাকেন তবে আপনি সম্ভবত কিছু শ্রেণির মানচিত্র অটোলোডার ব্যবহার করতে চান।
নেমস্পেস এবং হুকস
ওয়ার্ডপ্রেসের হুক সিস্টেমটি call_user_func
(এবং call_user_func_array
) ব্যবহার করে কাজ করে যা ফাংশনের নামগুলি স্ট্রিং হিসাবে গ্রহণ করে এবং যখন do_action
(এবং, পরবর্তীকালে call_user_func
) ফাংশন কল করা হয় তখন তাদের ডাকে।
নেমস্পেসগুলির সাথে, এর অর্থ হল আপনাকে পুরোপুরি যোগ্যতাসম্পন্ন ফাংশন নামগুলি পাস করতে হবে যা নাম স্থানটিকে হুকের মধ্যে অন্তর্ভুক্ত করবে।
<?php
namespace WPSE\SomeNameSpace;
add_filter('some_filter', 'WPSE\\SomeNameSpace\\the_function');
function the_function()
{
return 'did stuff';
}
আপনি যদি এটি করতে চান তবে সম্ভবত __NAMESPACE__
যাদুবিদ্যার উদার ব্যবহার করা ভাল ।
<?php
namespace WPSE\SomeNameSpace;
add_filter('some_filter', __NAMESPACE__ . '\\the_function');
function the_function()
{
return 'did stuff';
}
আপনি যদি সর্বদা আপনার হুকগুলি ক্লাসে রাখেন তবে এটি আরও সহজ। স্ট্যান্ডার্ড কোনও বর্গের উদাহরণ তৈরি করে এবং কন্সট্রাক্টরের সমস্ত হুক $this
কাজ করে কাজ করে।
<?php
namespace WPSE\SomeNameSpace;
new Plugin;
class Plugin
{
function __construct()
{
add_action('plugins_loaded', array($this, 'loaded'));
}
function loaded()
{
// this works!
}
}
আমি করতে চাইলে আপনি যদি স্থির পদ্ধতি ব্যবহার করেন তবে আপনাকে অ্যারের প্রথম যুক্তি হিসাবে সম্পূর্ণ যোগ্য শ্রেণীর নামটি পাস করতে হবে। এটি অনেক কাজ, যাতে আপনি কেবল ম্যাজিক __CLASS__
ধ্রুবক ব্যবহার করতে পারেন বা get_class
।
<?php
namespace WPSE\SomeNameSpace;
Plugin::init();
class Plugin
{
public static function init()
{
add_action('plugins_loaded', array(__CLASS__, 'loaded'));
// OR: add_action('plugins_loaded', array(get_class(), 'loaded'));
}
public static function loaded()
{
// this works!
}
}
কোর ক্লাস ব্যবহার করা
পিএইচপি'র ক্লাস নেম রেজোলিউশনটি কিছুটা দুর্বল। যদি আপনি মূল ডাব্লুপি ক্লাস ব্যবহার করতে চলেছেন ( WP_Widget
নীচের উদাহরণে) আপনাকে অবশ্যই use
বিবৃতি প্রদান করতে হবে ।
use \WP_Widget;
class MyWidget extends WP_Widget
{
// ...
}
অথবা আপনি সম্পূর্ণরূপে যোগ্য শ্রেণীর নামটি ব্যবহার করতে পারেন - মূলত কেবল ব্যাকস্ল্যাশ সহ এটি উপস্থাপন করা।
<?php
namespace WPSE\SomeNameSpace;
class MyWidget extends \WP_Widget
{
// ...
}
সংজ্ঞায়িত
এটি আরও সাধারণ পিএইচপি, তবে এটি আমাকে বিট করে, তাই এটি এখানে।
আপনার প্লাগইনটির পথের মতো আপনি প্রায়শই ব্যবহার করবেন এমন জিনিসগুলি আপনি সংজ্ঞায়িত করতে চাইতে পারেন। সংজ্ঞায়িত স্টেটমেন্টটি ব্যবহার করে জিনিসগুলি রুট নেমস্পেসে রাখে যদি না আপনি স্পষ্টরূপে সংজ্ঞাটির প্রথম যুক্তির মধ্যে নেমস্পেসটি প্রবেশ করেন।
<?php
namespace WPSE\SomeNameSpace;
// root namespace
define('WPSE_63668_PATH', plugin_dir_path(__FILE__));
// in the current namespace
define(__NAMESPACE__ . '\\PATH', plugin_dir_path(__FILE__));
আপনি const
পিএইচপি 5.3 প্লাস সহ কোনও ফাইলের মূল স্তরে কীওয়ার্ডটি ব্যবহার করতে পারেন । consts
গুলি সর্বদা বর্তমান নেমস্পেসে থাকে তবে কোনও define
কলটি তার চেয়ে কম নমনীয় ।
<?php
namespace WPSE\SomeNameSpace;
// in the current namespace
const MY_CONST = 1;
// this won't work!
const MY_PATH = plugin_dir_path(__FILE__);
আপনার থাকতে পারে অন্য কোনও টিপস নির্দ্বিধায় বোধ করুন!