plug-in ယန္တရားသည်အရွယ်အစားအမျိုးမျိုးဖွံ့ဖြိုးသည့်အခါအလွန်အသုံးများသောဗိသုကာဒီဇိုင်းဖြစ်သည်။ plug-ins မှတဆင့် developer များကအဓိကစနစ်၏အဓိကကုဒ်ကိုပြောင်းလဲခြင်းမရှိဘဲ developer များကလုပ်ငန်းဆောင်တာအသစ်များကိုထည့်နိုင်သည်။ Plug-in ၏ဖွဲ့စည်းပုံသည်မျှော်လင့်ချက်များနှင့်ကိုက်ညီမှုရှိစေရန်သေချာစေရန်အတွက်ပုံမှန်အားဖြင့် plug-in အတန်းအစားသည်အခြေစိုက်စခန်းမှအမွေဆက်ခံမှုရှိမရှိဆုံးဖြတ်ရန်လိုအပ်သည်။ PHP တွင်ကျွန်ုပ်တို့သည်၎င်းကိုအောင်မြင်ရန် IS_A () function ကိုသုံးနိုင်သည်။
is_a () သည် PHP တွင်အသုံးပြုသောလုပ်ဆောင်ချက်တစ်ခုဖြစ်ပြီး၎င်းသည်အရာဝတ်ထုတစ်ခုသည်အတန်းတစ်ခု၏ဥပမာတစ်ခု, ၎င်း၏ function ကိုလက်မှတ်သည်အောက်ပါအတိုင်းဖြစ်သည် -
is_a(object|string $object_or_class, string $class, bool $allow_string = false): bool
$ Object_or_Class သည် အရာဝတ်ထုတစ်ခုသို့မဟုတ်အတန်းအစားအမည် (string) ဖြစ်နိုင်သည်။
$ အတန်း သည်သင်ဆုံးဖြတ်လိုသည့်ပစ်မှတ်အတန်းအစားအမည်ဖြစ်သည်။
$ Allow_String စစ်မှန်တဲ့ ဖြေရှင်းမယ်ဆိုရင် $ object_or_Class ဟာ class name တစ်ခုဖြစ်နိုင်တယ်,
plug-in framework ကိုဒီဇိုင်းဆွဲသည့်အခါများသောအားဖြင့်ကျွန်ုပ်တို့သည်များသောအားဖြင့် plug-in base class တစ်ခုရှိပြီး Plug-ins အားလုံးသည်ဤအခြေစိုက်စခန်းအတန်းအစားကိုအမွေဆက်ခံရမည်။ ဥပမာအားဖြင့်:
abstract class PluginBase {
abstract public function run();
}
နောက်တစ်ခုက plug-in အကောင်အထည်ဖော်မှုများစွာရှိလိမ့်မယ်။
class HelloPlugin extends PluginBase {
public function run() {
echo "Hello from plugin!";
}
}
ဤအချိန်တွင်ကျွန်ုပ်တို့သည် plugin class တစ်ခုတင်ရန်နှင့် Pluginbase မှအမွေဆက်ခံသည်ကိုဆုံးဖြတ်ရန်လိုအပ်သည်။ ဒါကသင် is_a () ကို သုံးနိုင်ပါတယ်။
ဥပမာအားဖြင့် plug-in အတန်းကိုရောင်ပြန်ဟပ်မှု (သို့) configuration files များမှတဆင့်ပုံမှန်အားဖြင့် dynamure ကိုတင်ထားပြီး၎င်းကိုကျွန်ုပ်တို့ဤကဲ့သို့သောစစ်ဆေးနိုင်သည်။
$pluginClass = 'HelloPlugin';
if (class_exists($pluginClass) && is_a($pluginClass, 'PluginBase', true)) {
$pluginInstance = new $pluginClass();
$pluginInstance->run();
} else {
echo "ပလပ်အင် $pluginClass သတ်မှတ်ချက်များနှင့်မကိုက်ညီပါ,မှအမွေခံရမည် PluginBase";
}
ဤတွင် is_a ($ pluginbase ', pluginbase', True) သည် Pluginbase မှ အမွေဆက်ခံခြင်းရှိမရှိဆုံးဖြတ်ရန်ဖြစ်သည် ။
plugins များသည်များသောအားဖြင့် PHP ဖိုင်များသည်သီးခြားလမ်းညွှန်တစ်ခုတွင်ဖြန့်ဝေသည်။ ကျွန်ုပ်တို့သည်အလိုအလျောက် loader ကိုအတန်းကိုအလိုအလျောက်ဖွင့်ပြီးဆုံးဖြတ်ရန် is_a () ကို သုံးနိုင်သည်။ ဥပမာအားဖြင့်:
spl_autoload_register(function($class) {
include_once __DIR__ . '/plugins/' . $class . '.php';
});
$pluginList = ['HelloPlugin', 'AnotherPlugin'];
foreach ($pluginList as $pluginClass) {
if (class_exists($pluginClass) && is_a($pluginClass, 'PluginBase', true)) {
$plugin = new $pluginClass();
$plugin->run();
} else {
echo "ပလပ်အင် $pluginClass အားမရှိသော,ဂရုမစိုက်ခြင်း\n";
}
}
ဥပမာအားဖြင့်, သင့်တွင် URL https://m66.net/plugin-feed တွင် plug-in update များစာရင်းပေးရန်။ သင်ဤ interface မှ plug-in အတန်းအစားအမည်ကိုသင် dvonce ကိုရယူနိုင်ပါသည်, plug-in ဖိုင်ကို download လုပ်ပါ။ Loading ပြီးနောက်၎င်းသည် plug-in သည်ဥပဒေရေးရာဟုတ်မဟုတ်ဆုံးဖြတ်ရန် is_a () ဖြစ်သည် ။
$pluginData = json_decode(file_get_contents('https://m66.net/plugin-feed'), true);
foreach ($pluginData as $pluginClass => $pluginFile) {
file_put_contents(__DIR__ . "/plugins/$pluginClass.php", file_get_contents($pluginFile));
include_once __DIR__ . "/plugins/$pluginClass.php";
if (is_a($pluginClass, 'PluginBase', true)) {
$plugin = new $pluginClass();
$plugin->run();
}
}
၎င်းသည် plug-in ယန္တရား၏ပြောင်းလွယ်ပြင်လွယ်မှုကိုသေချာစေရုံသာမကစနစ်၏လုံခြုံရေးနှင့်တည်ငြိမ်မှုကိုပိုမိုကောင်းမွန်စေသည်။