လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Sterf_autoload_register () နှင့် is_a () ကိုအလိုအလျောက် 0 င်ရောက်ခြင်းတွင်အလိုအလျှောက် 0 န်ဆောင်မှုပေးရန်မည်သို့ပေါင်းစပ်ရမည်နည်း။

Sterf_autoload_register () နှင့် is_a () ကိုအလိုအလျောက် 0 င်ရောက်ခြင်းတွင်အလိုအလျှောက် 0 န်ဆောင်မှုပေးရန်မည်သို့ပေါင်းစပ်ရမည်နည်း။

M66 2025-06-15

Modern PHP ဖွံ့ဖြိုးတိုးတက်မှုတွင်အလိုအလျောက်တင်ဆောင်သည့်ယန္တရားများသည်မရှိမဖြစ်လိုအပ်သောအစိတ်အပိုင်းတစ်ခုဖြစ်လာသည်။ SPL_Autoload_register () , အတန်းအစားမ သတ်မှတ်ထားသော အချိန်တွင်စာသင်ချိန်၌မကိုက်ညီသောအခါ , သို့သော်အချို့သောကိစ္စရပ်များတွင်ကျွန်ုပ်တို့သည် Automatic Loading အမျိုးအစားကိုအကောင်အထည်ဖော်မှုအမျိုးအစားတစ်ခုသို့မဟုတ်အလိုအလျှောက်အလိုအလျှောက်အခြေခံအကျဆုံးအမျိုးအစားဖြစ်သည်

ဤဆောင်းပါးသည် Code ၏ကြံ့ခိုင်မှုနှင့်ထိန်းသိမ်းခြင်းကိုအလိုအလျောက် 0 ယ်ရန်အလိုအလျောက် 0 င် နိုင် သည့်အတန်းအမျိုးအစားစစ်ဆေးခြင်းကိုပြုလုပ်ရန်မည်သို့ပေါင်းစပ်မည်ကိုဤဆောင်းပါးသည်မည်သို့ပြုလုပ်ရမည်ကိုမိတ်ဆက်ပေးလိမ့်မည်။

အလိုအလျှောက်အခြေခံကို load

spl_autoload_register () က ကျွန်ုပ်တို့အား autoload လုပ်ဆောင်ချက်တစ်ခုသို့မဟုတ်တစ်ခုထက်ပိုသောမှတ်ပုံတင်ရန်ခွင့်ပြုသည်။ undefined class ကိုကြိုးစားသည့်အခါတိုင်း PHP သည်ဤလုပ်ဆောင်ချက်များကိုအတန်းနှင့်အဓိပ္ပါယ်ဖွင့်ရန်ကြိုးစားရန်တောင်းဆိုထားသည်။

နမူနာကုဒ်သည်အောက်ပါအတိုင်းဖြစ်သည် -

 spl_autoload_register(function ($class) {
    $path = __DIR__ . '/classes/' . $class . '.php';
    if (file_exists($path)) {
        require_once $path;
    }
});

အထက်ဖော်ပြပါကုဒ်သည် PPP ဖိုင်များကိုအတန်းအမည်ရှိ အတန်း လမ်းညွှန်နှင့်ကိုက်ညီသောဖိုင်များကိုရှာဖွေလိမ့်မည်။

တင်ပြီးနောက်အမျိုးအစားကိုဆုံးဖြတ်ရန်

အချို့သောအခြေအနေများတွင်အတန်းများကိုသာဖွင့်ခြင်းသည်မလုံလောက်ပါ။ အတန်းသည်အခြေစိုက်စခန်းအတန်းအစား၏ subclass, သို့မဟုတ် interface ကိုအကောင်အထည်ဖော်ခြင်းရှိမရှိကိုလည်းကျွန်ုပ်တို့လည်းသိလိုကြသည်။ ဒီအချိန်မှာသင်ဟာဆုံးဖြတ်ချက်ချဖို့ _a () ကို သုံးနိုင်တယ်။

 if (class_exists($class) && is_a($class, 'SomeInterface', true)) {
    // $class ဟုတ်ကဲ့ SomeInterface အကောင်အထည်ဖော်မှုအတန်း
}

သတိပြုရန်မှာဤနေရာတွင်တတိယ parameter သည် မှန်ကန်မှု ရှိကြောင်း,

လက်တွေ့ - အလိုအလျောက်တင်ခြင်းနှင့်အမျိုးအစားကိုရိုက်ခြင်း

အောက်တွင်ကျွန်ုပ်တို့အောက်တွင်ပြည့်စုံသောအလိုအလျောက် loader ကိုရေးပါ။

 spl_autoload_register(function ($class) {
    $baseDir = __DIR__ . '/classes/';
    $file = $baseDir . $class . '.php';

    if (file_exists($file)) {
        require_once $file;

        if (!is_a($class, 'App\\Contracts\\ServiceInterface', true)) {
            throw new Exception("အမျိုးအစား {$class} အောင်မြင်ရမည်ဖြစ်သည် App\\Contracts\\ServiceInterface ထိသိျက်နှာ。");
        }
    } else {
        throw new Exception("无法加载အမျိုးအစား {$class},ဖိုင်မတည်ရှိပါဘူး。");
    }
});

ဤဥပမာတွင် 0 န်ဆောင်မှုအတန်းအားလုံးသည် အက်ပလီကေးရှင်းများ \ t 0 န်ဆောင်မှုများ interface ကိုအကောင်အထည်ဖော်ရမည်ဟုယူဆကြသည် အကယ်. အတန်းတစ်ခုသည် interface ကိုအကောင်အထည်မ 0 င်ပါကခြွင်းချက်တစ်ခုချထားသည်။

စမ်းသပ်အတန်းနှင့် interfaces

အထက်ပါကုဒ်ကိုအတည်ပြုရန်ကျွန်ုပ်တို့သည်အောက်ပါ class ကိုနှင့် interface ဖွဲ့စည်းပုံကိုဖန်တီးနိုင်သည်။

 // ဖိုင်လမ်းကြောင်း:classes/MyService.php
namespace App\Services;

use App\Contracts\ServiceInterface;

class MyService implements ServiceInterface {
    public function handle() {
        echo "စီးပွားရေးယုတ္တိဗေဒကိုင်တွယ်ပါ";
    }
}

// ဖိုင်လမ်းကြောင်း:classes/App/Contracts/ServiceInterface.php
namespace App\Contracts;

interface ServiceInterface {
    public function handle();
}

ထို့နောက်၎င်းကိုအဓိကအစီအစဉ်တွင်သုံးပါ။

 use App\Services\MyService;

$service = new MyService();
$service->handle();

MyService ကို ကျွန်ုပ်တို့ intietiate လုပ်သည့်အခါ Autoloader သည်အတန်းကိုဖွင့်ပြီး 0 န်ဆောင်မှုကို အကောင်အထည်ဖော်ခြင်းရှိမရှိစစ်ဆေးလိမ့်မည်။ အကယ်. ၎င်းကိုအကောင်အထည်ဖော်ခြင်းမရှိပါကခြွင်းချက်တစ်ခုချပစ်လိမ့်မည်။

အကျဉ်းချုပ်

spl_autoload_register () နှင့် is_a () ကိုပေါင်းစပ်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်ပိုမိုခိုင်မာသည့်အလိုအလျောက်တင်ဆောင်သည့်ယန္တရားကိုအကောင်အထည်ဖော်နိုင်သည်။ It not only allows dynamically loading class files, but also enables you to verify that its type meets expectations immediately after the class is loaded. ဤချဉ်းကပ်မှုသည်မူဘောင်ဖွံ့ဖြိုးတိုးတက်မှု, plug-in စီမံခန့်ခွဲမှုသို့မဟုတ်ကြီးမားသောစနစ်ဗိသုကာများတွင်ခိုင်မာသည့်အမျိုးအစားအကန့်အသတ်များလိုအပ်သည့်အခြေအနေများအတွက်ဖြစ်ရပ်များအတွက်အကောင်းဆုံးဖြစ်သည်။