လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> third-party libraries spl_autoload_Unregister မှတစ်ဆင့် Autoloaders များကိုမည်သို့စီမံခန့်ခွဲရမည်နည်း

third-party libraries spl_autoload_Unregister မှတစ်ဆင့် Autoloaders များကိုမည်သို့စီမံခန့်ခွဲရမည်နည်း

gitbox 2025-05-27

ခေတ်သစ် PHP စီမံကိန်းများတွင်အလိုအလျောက်တင်ဆောင်သည့်ယန္တရားသည် Class ဖိုင်များအားအထူးသဖြင့် composer ကို အသုံးပြု. စီမံခန့်ခွဲသောအခြေအနေများမိတ်ဆက်ခြင်းကိုအလွန်ရိုးရှင်းစေသည်။ သို့သော်အချို့သောရှုပ်ထွေးသောဖြစ်ရပ်များတွင် developer များကစာကြည့်တိုက်တစ်ခု Debug ကို debug လုပ်ခြင်း, ပ conflicts ိပက်ခများကိုရှောင်ကြဉ်ခြင်း, ဤအချိန်တွင် Spl_autoload_Unregister () သည် အထူးအရေးကြီးသည်။

ဤဆောင်းပါးသည် Spl_Autoload_Unregister () ကို မည်သို့အသုံးပြုရမည် () ကိုသုံးရန်နှင့် တတိယပါတီစာကြည့်တိုက်မှမှတ်ပုံတင်ထားသော autoloader ကိုရှာဖွေရန်နှင့်ဖယ်ရှားရန် ဥပမာများကိုပြသမည်။

PHP ၏အလိုအလျောက်တင်ခြင်း stack ကိုနားလည်သည်

PHP သည် spl_ * autooloaders များကိုကိုင်တွယ်ရန် Spl_ * လုပ်ဆောင်ချက်များကိုပေးသည်။

  • spl_autoload_register () - အလိုအလျောက်တင်ထားသော function ကိုမှတ်ပုံတင်ပါ။

  • spl_autoload_unregister () : မှတ်ပုံတင်ထားသော Autoload function ကိုဖယ်ရှားပေးသည်။

  • Spl_autoload_Functions () - လက်ရှိမှတ်ပုံတင်ထားသော autoloading လုပ်ဆောင်ချက်များကိုပြန်လည်ရောက်ရှိသည်။

ဥပမာအားဖြင့်, တေးရေးဆရာကိုအသုံးပြုသောအခါ, အောက်ပါစနစ်တကျ autoloaders များကိုသင်တွေ့ရလေ့ရှိသည်။

 array(
    0 => array(
        0 => 'Composer\\Autoload\\ClassLoader',
        1 => 'loadClass'
    )
)

ဆိုလိုသည်မှာတေးရေးဆရာသည် loader တစ်ခုအဖြစ်အတန်းအစားတစ် ဦး အတန်းအစားနည်းလမ်းကိုမှတ်ပုံတင်သည်။

တတိယပါတီမှမှတ်ပုံတင်ထားသော autoloader ကိုဖယ်ရှားပါ

ကျွန်ုပ်တို့နှင့် 0 င်ရောက်စွက်ဖက်သောတတိယပါတီစာကြည့်တိုက်တစ်ခု၏အလိုအလျောက်တင်ဆောင်လာသော Loading Loading Loading Loading Loading Loading Loading Logic ကိုကြုံတွေ့ရသည်ဆိုပါစို့။ ဤအချက်မှာ, ကျွန်ုပ်တို့တွင် autoload stack မှ၎င်းကိုဖယ်ရှားရန် ရွေးချယ်စရာရှိသည်။

တိကျသော autoloader ကိုဖယ်ရှားရန်နမူနာကုဒ်ဖြစ်သည်။

 <?php

$autoloaders = spl_autoload_functions();

foreach ($autoloaders as $loader) {
    if (is_array($loader) && isset($loader[0]) && is_object($loader[0])) {
        $className = get_class($loader[0]);
        
        if ($className === 'Some\\ThirdParty\\Loader') {
            spl_autoload_unregister($loader);
        }
    }
}

ဤအတန်း (သို့) နည်းလမ်းကိုတိကျသောဖိုင်သို့မဟုတ်စာကြည့်တိုက်ကို သုံး. မှတ်ပုံတင်ထားကြောင်းကျွန်ုပ်တို့သိပါက၎င်းကို Debugebacktace () သို့မဟုတ်ရောင်ပြန်ဟပ်မှုဖြင့်၎င်းကိုထပ်မံဖော်ထုတ်နိုင်သည်။

 foreach (spl_autoload_functions() as $loader) {
    if (is_array($loader) && is_object($loader[0])) {
        $ref = new ReflectionClass($loader[0]);
        echo $ref->getFileName() . PHP_EOL;
    }
}

ဥပမာ - တိကျသောစာကြည့်တိုက်၏ Loader ကိုဖယ်ရှားပါ

အချို့သောစာကြည့်တိုက်များသည်တေးရေးဆရာကိုမှီခိုမည့်အစားမိမိတို့၏ကိုယ်ပိုင် autooloaders များကိုကိုယ်တိုင်မှတ်ပုံတင်နိုင်သည်။ အကယ်. သင်သည်အတန်း၏ loader ကို Gitbox.Net/vendor/somevendor/SomeMackage မှလာသည်ကိုသေချာလျှင်သင်ဖိုင်လမ်းကြောင်းနှင့်အတန်းအစားအမည်ကိုနှိုင်းယှဉ်နိုင်သည်။

 foreach (spl_autoload_functions() as $loader) {
    if (is_array($loader) && is_object($loader[0])) {
        $class = get_class($loader[0]);
        $ref = new ReflectionClass($loader[0]);
        $file = $ref->getFileName();

        if (strpos($file, 'gitbox.net/vendor/somevendor/somepackage') !== false) {
            spl_autoload_unregister($loader);
        }
    }
}

မှတ်သားရန်အရာ

  1. Sequence Sensitive : PHP ရဲ့ autooloader တွေကိုမှတ်ပုံတင်ရန်အမိန့်ကိုခေါ်ပြီးဖယ်ရှားခြင်းကသူတို့ရဲ့ loading pather ကိုမှီခိုနေရတဲ့အခြားအတန်းတွေကိုလည်းမှန်ကန်စွာဖွင့်ပေးနိုင်တယ်။

  2. ရက်ပေါင်း မနာလိုမှု - loader ကိုဖယ်ရှားပြီးသည်နှင့်အတန်းပြန်အပ်နှံရန်လိုအပ်ပါကသင်ခန်းစာကိုပြန်လည်ဖွင့်ရန်လိုအပ်သည်သို့မဟုတ်သင်ကိုယ်တိုင်ကိုကိုယ်တိုင်ကိုယ်ကျအကောင်အထည်ဖော်ရန်လိုအပ်သည်။

  3. လက်ရှိတောင်းဆိုမှုအတွက်သာ - Spl_Autoload_Unregister () ၏အကျိုးသက်ရောက်မှုသည်လက်ရှိတောင်းဆိုမှုဘဝသံသရာနှင့်သက်ဆိုင်သည်။ အခြားတောင်းဆိုမှုများကိုထိခိုက်လိမ့်မည်မဟုတ်ပါ။

အကျဉ်းချုပ်

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