လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> plug-in framework ကိုတည်ဆောက်ရာတွင် Plug-in Base Gaterial ၏အမွေဆက်ခံမှုကိုအတည်ပြုရန် is_a () ကိုသုံးပါ

plug-in framework ကိုတည်ဆောက်ရာတွင် Plug-in Base Gaterial ၏အမွေဆက်ခံမှုကိုအတည်ပြုရန် is_a () ကိုသုံးပါ

M66 2025-05-31

plug-in ယန္တရားသည်အရွယ်အစားအမျိုးမျိုးဖွံ့ဖြိုးသည့်အခါအလွန်အသုံးများသောဗိသုကာဒီဇိုင်းဖြစ်သည်။ plug-ins မှတဆင့် developer များကအဓိကစနစ်၏အဓိကကုဒ်ကိုပြောင်းလဲခြင်းမရှိဘဲ developer များကလုပ်ငန်းဆောင်တာအသစ်များကိုထည့်နိုင်သည်။ Plug-in ၏ဖွဲ့စည်းပုံသည်မျှော်လင့်ချက်များနှင့်ကိုက်ညီမှုရှိစေရန်သေချာစေရန်အတွက်ပုံမှန်အားဖြင့် plug-in အတန်းအစားသည်အခြေစိုက်စခန်းမှအမွေဆက်ခံမှုရှိမရှိဆုံးဖြတ်ရန်လိုအပ်သည်။ PHP တွင်ကျွန်ုပ်တို့သည်၎င်းကိုအောင်မြင်ရန် IS_A () function ကိုသုံးနိုင်သည်။

is_a () ကဘာလဲ

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 တစ်ခုဖြစ်နိုင်တယ်,

Plugin Base Class ဒီဇိုင်းဥပမာ

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 () ကို သုံးနိုင်ပါတယ်။

အမွေဆက်ဆက်ဆက်ဆံရေးကိုဆုံးဖြတ်ရန် 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 မှ အမွေဆက်ခံခြင်းရှိမရှိဆုံးဖြတ်ရန်ဖြစ်သည်

autoloader နှင့် plugin လမ်းညွှန်နှင့်အတူပေါင်းစပ်

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 ယန္တရား၏ပြောင်းလွယ်ပြင်လွယ်မှုကိုသေချာစေရုံသာမကစနစ်၏လုံခြုံရေးနှင့်တည်ငြိမ်မှုကိုပိုမိုကောင်းမွန်စေသည်။

အကျဉ်းချုပ်