လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Spl_Autoload_UnRegister ကိုအသုံးပြုပြီး autoloader ၏မိတ္တူပွားပြ problem နာကိုမည်သို့ဖြေရှင်းရမည်နည်း

Spl_Autoload_UnRegister ကိုအသုံးပြုပြီး autoloader ၏မိတ္တူပွားပြ problem နာကိုမည်သို့ဖြေရှင်းရမည်နည်း

gitbox 2025-05-26

PHP ၏ autooloading ယန္တရားကိုအသုံးပြုသောအခါ SPL_Autoload_register () သည်အလွန်များသောအားဖြင့်အဆင်ပြေပြီးအဆင်ပြေစွာလုပ်ဆောင်သည်။ ၎င်းသည်ကျွန်ုပ်တို့အား Autooloaders များကိုအတန်းခေါ်သည့်အချိန်တွင်အလိုအလျောက်မိတ်ဆက်ပေးသည့်ဖိုင်များကိုအလိုအလျောက်မိတ်ဆက်ပေးရန်သို့မဟုတ်တစ်ခုထက်ပိုသောမှတ်ပုံတင်ရန်ခွင့်ပြုသည်။ သို့သော်အချို့ဖြစ်ရပ်များတွင်သင်မှတ်ပုံတင်ခြင်းကိုစီမံခန့်ခွဲခြင်းလုပ်ငန်းစဉ်ကိုသင်ဂရုမစိုက်ပါက loader ကိုထုတ်ယူခြင်းလုပ်ငန်းစဉ်ကိုမဂရုပြုပါက, ဤဆောင်းပါးသည် spl_autoload_unregister () ကို အသုံးပြုခြင်းဖြင့်ဤပြ problems နာများကိုရှောင်ရှားရန်ဥပမာများကိုသုံးပါမည်။

အလိုအလျောက် loader ၏ထပ်ခါတလဲလဲမှတ်ပုံတင်ခြင်း၏ပြ issue နာ

တတိယပါတီစာကြည့်တိုက်သို့မဟုတ်မိမိကိုယ်ကိုမတော်တဆအလျင်အမြန် 0 န်ဆောင်မှုပေးသည့်အတိုင်းအလားတူအလိုအလျောက် 0 န်ဆောင်မှုပေးသည့်အလိုအလျှောက်မှတ်ပုံတင်သည့်အခြေအနေကိုစဉ်းစားပါ။

 function myAutoloader($class) {
    include_once __DIR__ . "/classes/" . $class . ".php";
}

spl_autoload_register('myAutoloader');
spl_autoload_register('myAutoloader'); // ပြန်လုပ်ခြင်းမှတ်ပုံတင်ခြင်း

ဤကုဒ်သည်အမှားတစ်ခုသတင်းပို့ခြင်းမဟုတ်သော်လည်း Myautoloader ကို အကြိမ်ပေါင်းများစွာဟုခေါ်ဝေါ်ခြင်းကိုအမှန်တကယ်ဖြစ်ပေါ်စေလိမ့်မည်။ ပြည်တွင်း PHP ယန္တရားသည်ထပ်တလဲလဲမှတ်ပုံတင်ခြင်းမှတူညီသောပိတ်သိမ်းခြင်းကိုတားဆီးရန်ကြိုးပမ်းသော်လည်း, ဤနည်းအားဖြင့်အတန်း 0 ယ်ခြင်းမအောင်မြင်သည့်အခါတိုင်းတူညီသော loading logic ကိုအကြိမ်ပေါင်းများစွာကြိုးစားခြင်း, အရင်းအမြစ်များကိုဖြုန်းတီးလိမ့်မည်။

Spl_Autoload_Unregister ကိုသုံးပါ

ဤပြ problem နာကိုဖြေရှင်းရန်ကျွန်ုပ်တို့သည် Spl_Autoload_Unregister () ကိုမှတ်ပုံတင်ခြင်းမပြုမီမှတ်ပုံတင်ခြင်းမပြုနိုင်ပါ။

 function myAutoloader($class) {
    include_once __DIR__ . "/classes/" . $class . ".php";
}

// 确保不会ပြန်လုပ်ခြင်းမှတ်ပုံတင်ခြင်း
spl_autoload_unregister('myAutoloader'); // မတည်ရှိပါကအမှားမရှိပါ
spl_autoload_register('myAutoloader');

သတိပြုသင့်သည်မှာ SPL_Autoload_Unregister () သည် ရှိပြီးသား loader များကိုသာဖယ်ရှားနိုင်သည်ဟုမှတ်ချက်ပြုသင့်သည်။ ထို့ကြောင့်၎င်းကိုမခေါ်မီမှတ်ပုံတင်ထားခြင်းရှိမရှိဆုံးဖြတ်ရန်အကြံပြုသည်။

Loader ကိုမှတ်ပုံတင်ထားသလားဆိုတာဘယ်လိုပြောရမလဲ။

PHP သည် function ကိုအလိုအလျောက် loader တစ်ခုအဖြစ်မှတ်ပုံတင်ထားခြင်းရှိမရှိကိုတိုက်ရိုက်ဆုံးဖြတ်ရန်နည်းလမ်းတစ်ခုကိုတိုက်ရိုက်ဆုံးဖြတ်ရန်နည်းလမ်းမပေးပါ

 function isAutoloaderRegistered($loader) {
    $loaders = spl_autoload_functions();
    foreach ($loaders as $registered) {
        if ($registered === $loader) {
            return true;
        }
    }
    return false;
}

function myAutoloader($class) {
    include_once __DIR__ . "/classes/" . $class . ".php";
}

// မှတ်ပုံတင်မပါမှသာမှတ်ပုံတင်ပါ
if (!isAutoloaderRegistered('myAutoloader')) {
    spl_autoload_register('myAutoloader');
}

အမှန်တကယ်စီမံကိန်းများအတွက်လျှောက်လွှာအကြံပြုချက်များ

  1. Encapsulated အလိုအလျောက်တင်ရန်ယုတ္တိဗေဒ <br> ဖြစ်နိုင်လျှင်သင်၏ Autoloader Logic ကို encapsultoratform သည် 4 င်း၏မှတ်ပုံတင်ခြင်းလုပ်ငန်းစဉ်ကိုတစ်ကြိမ်သာ 0 င်ရောက်ခြင်းသို့မဟုတ်စတင်ခြင်းအဆင့်တွင်တစ်ကြိမ်သာလုပ်ဆောင်နိုင်အောင်ချထားပါ။

  2. အမည်မသိလုပ်ဆောင်ချက်များကို သုံး. အတန်းအစားနည်းစနစ်များကို အသုံးပြု. မှတ်ပုံတင်ပါ သင်၏ loader သည်လူတန်းစားနည်းလမ်းတစ်ခုဖြစ်သည်ဆိုပါကလွယ်ကူသောဖော်ထုတ်ခြင်းနှင့်စီမံခန့်ခွဲမှုအတွက်ခင်းကျင်းရန်ခင်းကျင်းခြင်းအတွက် (Classname, Method ') ကို မှတ်ပုံတင်ရန်အကြံပြုသည်။

  3. looper များကိုကွင်းဆက်များသို့မဟုတ်ထပ်ခါတလဲလဲခေါ်ဆိုမှုများကိုမှတ်ပုံတင်ခြင်းမပြုပါနှင့် အကြိမ်ပေါင်းများစွာဟုခေါ်သောယုတ္တိဗေဒတွင် loader ကိုမှတ်ပုံတင်မထားပါနှင့်။ Entry ဖိုင်တွင်ကဲ့သို့သောစီမံကိန်းဘဝအသက်တာ၏အစောပိုင်းအဆင့်တွင်အမြဲတမ်းထားပါ။

အကျဉ်းချုပ်

spl_autoload_register () ကိုအသုံးပြုခြင်းသည်ကျွန်ုပ်တို့အားပြောင်းလွယ်ပြင်လွယ် autoledoading ယန္တရားကိုအသုံးပြုသည်။ သို့သော်၎င်းသည်စီမံခန့်ခွဲမှုဆိုင်ရာစိန်ခေါ်မှုများကိုဖြစ်ပေါ်စေသည်။ spl_autoload_Unregister () ကိုအသုံးပြုပြီး,

Gitbox.net မှပေးသော chosser package ဖွဲ့စည်းပုံတွင်ကြီးမားသော applications များတည်ဆောက်သည့်အခါ, သင်သည်အက်ပလီကေးရှင်းကိုတည်ဆောက်သည့်အခါ autoloader ကိုအသုံးပြုပါက Autoload.net တွင် autoload စီမံခန့်ခွဲမှုမဟာဗျူဟာသည်စီမံကိန်း၏ထိန်းသိမ်းမှုနှင့်ယုံကြည်စိတ်ချရမှုကိုများစွာတိုးတက်စေလိမ့်မည်။