လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ယူနစ်စမ်းသပ်မှုများတွင် spl_autoload_Unregister ကိုကြုံတွေ့ရသောအခါ Spl_autoload_UnRegrismer အမှားကိုမည်သို့ထိရောက်စွာရှောင်ရှားနိုင်မည်နည်း။

ယူနစ်စမ်းသပ်မှုများတွင် spl_autoload_Unregister ကိုကြုံတွေ့ရသောအခါ Spl_autoload_UnRegrismer အမှားကိုမည်သို့ထိရောက်စွာရှောင်ရှားနိုင်မည်နည်း။

gitbox 2025-06-24

PHP ပရိုဂရမ်တွင် Spl_autoload_register နှင့် Spl_autoload_Unregister တွင် Automatic Class Loading ကိုကိုင်တွယ်ရန်အသုံးပြုသောစံကိရိယာများဖြစ်သည်။ SPL_Autoload_register သည် developer များကိုအလိုအလျောက်တင်ထားသောလုပ်ဆောင်မှုများကိုမှတ်ပုံတင်ရန်ခွင့်ပြုသည်။ spl_autoload_Unregise ကို မှတ်ပုံတင်ထားသော Autoload လုပ်ဆောင်ချက်များကိုဖယ်ရှားရန်အသုံးပြုသည်။

သို့သော်ယူနစ်စစ်ဆေးမှုပြုလုပ်ရာတွင် Spl_Autoload_Unregister ကို အသုံးပြုသောအခါ spl_autoload_Unrogister ကိုအသုံးပြုသောအခါအမှားအယွင်းများကိုသင်ကြုံတွေ့ရလိမ့်မည်။ ဤဆောင်းပါးသည်ဤအမှားအယွင်းများကိုထိရောက်စွာရှောင်ရှားရန်နှင့်ဖြေရှင်းရန်အတိမ်အနက်ကိုလေ့လာပါမည်။

1 ။ Spl_autoload_Unregister အမှား၏အဓိကအကြောင်းအရင်းကိုနားလည်ပါ

ပထမ ဦး စွာ Spl_autoload_Unrigister အမှားအတွက်အကြောင်းပြချက်ကိုနားလည်ရန်အလွန်အရေးကြီးသည်။ PHP တွင် SPP တွင် Spl_autoload_Unregise သည် spl_autoload_register ဖြင့်မှတ်ပုံတင်ထားသော autoload လုပ်ဆောင်ချက်များကိုသာဖယ်ရှားနိုင်သည်။ အကယ်. function သည် autoutoad stack တွင်မတည်ရှိပါက spl_autoload_Unregise ကို ခေါ်ဆိုရန်ကြိုးစားခြင်းသည်အမှားတစ်ခုဖြစ်ပေါ်လိမ့်မည်။

ဘုံအမှားအခြေအနေများတွင်:

  • spl_autoload_Unregister ဟုခေါ်သည်။ သို့သော်မှတ်ပုံတင်ထားသောလုပ်ဆောင်ချက်မရှိပါ ။ အကယ်. သင်သည်မတည်ရှိသော autoload function ကိုသင်ဖယ်ရှားလိုက်လျှင်ဤအမှားအယွင်းရှိသည်။

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

2 ။ spl_autoload_Unregister အမှားကိုဘယ်လိုရှောင်ရှားရမလဲ

2.1 မှတ်ပုံတင်ထားခြင်းရှိမရှိစစ်ဆေးပါ

spl_autoload_Unregister ကို မခေါ်မီအကောင်းဆုံးလုပ်စရာအကောင်းဆုံးအရာမှာ Autoload function ကိုမှတ်ပုံတင်ထားခြင်းရှိမရှိစစ်ဆေးရန်ဖြစ်သည်။ SPL_AUTOLOADOAD_FURITITURITITES ကိုသင်အသုံးပြုနိုင်ပြီးလက်ရှိမှတ်ပုံတင်ထားသော Autoledoading functions များအားလုံးရရှိရန်လုပ်ဆောင်မှုကိုသုံးနိုင်သည်။

 <span><span><span class="hljs-variable">$autoloaders</span></span><span> = </span><span><span class="hljs-title function_ invoke__">spl_autoload_functions</span></span><span>();
</span><span><span class="hljs-variable">$functionName</span></span><span> = </span><span><span class="hljs-string">'your_autoloader_function_name'</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">in_array</span></span><span>(</span><span><span class="hljs-variable">$functionName</span></span><span>, </span><span><span class="hljs-variable">$autoloaders</span></span><span>)) {
    </span><span><span class="hljs-title function_ invoke__">spl_autoload_unregister</span></span><span>(</span><span><span class="hljs-variable">$functionName</span></span><span>);
}
</span></span>

၎င်းသည် spl_autoload_Unregister ကို function ကိုမှတ်ပုံတင်ခြင်းမရှိဘဲခေါ်ဆိုခြင်းမပြုဘဲအမှားအယွင်းများကိုထိရောက်စွာတားဆီးနိုင်သည်။

2.2 အထီးကျန်အလိုအလျှောက်တင်ဆောင်လာသောပတ်ဝန်းကျင်ကိုအသုံးပြုခြင်း

ယူနစ်စစ်ဆေးမှုတွင်ကမ္ဘာပေါ်တွင်အလိုအလျောက်တင်ထားသောလုပ်ဆောင်မှုများကိုမှတ်ပုံတင်ခြင်းမပြုရန်ရှောင်ပါ။ Autooloading ပတ်ဝန်းကျင်ကိုတည်ဆောက်ရန်နှင့်သန့်ရှင်းရေးလုပ်ရန်စမ်းသပ်မူဘောင်မှစမ်းသပ်ရှေ့နှင့်နောက်ချိတ်များကိုစမ်းသပ်ရန်အကြံပြုသည်။ ဥပမာအားဖြင့် Phpunit တွင် setup နှင့် မျက်ရည်များဆိုင်ရာ နည်းလမ်းများကို autooloading function ကိုအသီးသီးတပ်ဆင်ရန်နှင့်ရှင်းလင်းရန်အသုံးပြုနိုင်သည်။

 <span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">MyTest</span></span><span> </span><span><span class="hljs-keyword">extends</span></span><span> </span><span><span class="hljs-title">PHPUnit</span></span><span>\</span><span><span class="hljs-title">Framework</span></span><span>\</span><span><span class="hljs-title">TestCase</span></span><span>
{
    </span><span><span class="hljs-keyword">protected</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">setUp</span></span><span>(</span><span><span class="hljs-params"></span></span><span>): </span><span><span class="hljs-title">void</span></span><span>
    {
        </span><span><span class="hljs-comment">// Autoloading function ကိုတစ်ခုချင်းစီကိုစမ်းသပ်ခြင်းမပြုမီမှတ်ပုံတင်ပါ</span></span><span>
        </span><span><span class="hljs-title function_ invoke__">spl_autoload_register</span></span><span>(</span><span><span class="hljs-string">'my_autoloader'</span></span><span>);
    }

    </span><span><span class="hljs-keyword">protected</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">tearDown</span></span><span>(</span><span><span class="hljs-params"></span></span><span>): </span><span><span class="hljs-title">void</span></span><span>
    {
        </span><span><span class="hljs-comment">// စမ်းသပ်မှုတစ်ခုစီပြီးနောက် Autoload function ကိုထွက်ပါ</span></span><span>
        </span><span><span class="hljs-title function_ invoke__">spl_autoload_unregister</span></span><span>(</span><span><span class="hljs-string">'my_autoloader'</span></span><span>);
    }

    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">testSomething</span></span><span>(</span><span><span class="hljs-params"></span></span><span>)
    {
        </span><span><span class="hljs-comment">// အကြောင်းအရာစစ်ဆေးပါ</span></span><span>
    }
}
</span></span>

2.3 ထပ်ခါတလဲလဲမှတ်ပုံတင်ခြင်းကိုရှောင်ပါ

Autoload function တစ်ခုစီကိုတစ်ကြိမ်တည်းသာမှတ်ပုံတင်ထားကြောင်းသေချာပါစေ။ အကယ်. သင်သည်မတူညီသောစမ်းသပ်မှုအမှုများသို့မဟုတ်စမ်းသပ်အစုံတွင် Autoload function ကိုထပ်တလဲလဲမှတ်ပုံတင်ပါက၎င်းသည်မလိုအပ်သောပ conflicts ိပက်ခများသို့မဟုတ်အမှားများကိုဖြစ်ပေါ်စေနိုင်သည်။ autooloading လုပ်ချိန်ညှိသောအခါ, function ကိုတစ်ကြိမ်တည်းသာမှတ်ပုံတင်ပြီးသန့်ရှင်းရေးလုပ်ခြင်းကိုမှန်ကန်စွာလုပ်ဆောင်ပါ။

3 ။ spl_autoload_unregister အမှားကိုဘယ်လိုဖြေရှင်းရမလဲ

အကယ်. သင်သည် spl_autoload_Unregister အမှားကိုသင်တွေ့ကြုံခဲ့ပါကဤနေရာတွင်ဘုံဖြေရှင်းနည်းများဖြစ်သည်။

3.1 မှတ်ပုံတင်ထားသောအလိုအလျောက်တင်ထားသောလုပ်ဆောင်မှုကိုစစ်ဆေးပါ

ပထမ ဦး စွာ Spl_autoload_Unregister ဟုခေါ်သောအခါ, ပစ်မှတ် autoload function ကိုအောင်မြင်စွာမှတ်ပုံတင်ထားကြောင်းအတည်ပြုပါ။ target function ကိုအမှန်တကယ်တည်ရှိမလားကြည့်ရှုရန်လက်ရှိမှတ်ပုံတင်ထားသော Autoload function list ကိုစစ်ဆေးရန် Spl_Autoload_rofunctions ကို သုံးပါ။

3.2 ဖျက်သိမ်းခြင်းအတွက်အခြေအနေများကိုအသုံးပြုပါ

အကယ်. autoloading function ကိုမှတ်ပုံတင်ထားခြင်းရှိမရှိသင်မသေချာပါကမတည်ရှိသောလုပ်ဆောင်မှုကိုမထုတ်ယူနိုင်ရန်အပြင်ထွက်မထွက်ခွာမီစစ်ဆေးမှုအခြေအနေများကိုသင်ထည့်နိုင်သည်။ အောက်တွင်ပြထားတဲ့အတိုင်း:

 <span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">in_array</span></span><span>(</span><span><span class="hljs-string">'my_autoloader'</span></span><span>, </span><span><span class="hljs-title function_ invoke__">spl_autoload_functions</span></span><span>())) {
    </span><span><span class="hljs-title function_ invoke__">spl_autoload_unregister</span></span><span>(</span><span><span class="hljs-string">'my_autoloader'</span></span><span>);
}
</span></span>

ဤနည်းလမ်းသည် function ကိုမှတ်ပုံတင်မထားသည့်အခါအမှားအယွင်းများကိုပစ်ချလိမ့်မည်မဟုတ်ပါ။

3.3 Register_shutDown_Function ကို သုံး. အရင်းအမြစ်များကိုသန့်ရှင်းရေးပြုလုပ်ခြင်း

ရှုပ်ထွေးသောစစ်ဆေးမှုပတ် 0 န်းကျင်တွင်အချို့သောစမ်းသပ်မှုများကွပ်မျက်ခံရပြီးနောက်ကမ္ဘာလုံးဆိုင်ရာအရင်းအမြစ်သန့်ရှင်းရေးလုပ်ရန်လိုအပ်နိုင်သည်။ Register_ShutDown_Function ကို စစ်ဆေးမှုပြီးဆုံးပြီးနောက်ပျောက်ဆုံးနေသည့် Autoledoing လုပ်ဆောင်ချက်များကိုမည်သည့်နည်းဖြင့်မဆိုဝင်ရောက်နိုင်ရန်အတွက်အသုံးပြုနိုင်သည်။

 <span><span><span class="hljs-title function_ invoke__">register_shutdown_function</span></span><span>(function() {
    </span><span><span class="hljs-title function_ invoke__">spl_autoload_unregister</span></span><span>(</span><span><span class="hljs-string">'my_autoloader'</span></span><span>);
});
</span></span>

ဤအချက်သည်ဇာတ်ညွှန်း၏အဆုံးတွင် script ကို script ကိုအလိုအလျောက်သန့်ရှင်းအောင်ပြုလုပ်နိုင်သည်,

4 ။ အကျဉ်းချုပ်

PHP spl_autoload_Unregister အမှားသည်များသောအားဖြင့် autoload function ၏မှတ်ပုံတင်ခြင်းနှင့်ဖျက်သိမ်းခြင်းအမိန့်သို့မဟုတ်မှတ်ပုံတင်ထားခြင်းမရှိသော autoload function ကိုထွက်ရန်ကြိုးပမ်းမှုမှပြုလုပ်သည်။ ယူနစ်စမ်းသပ်ခြင်းတွင်အကောင်းဆုံးနည်းလမ်းမှာ -

  • စမ်းသပ်မှုအမှုတစ်ခုချင်းစီမတိုင်မီနှင့်ပြီးနောက် Autoload လုပ်ဆောင်မှုကိုမှန်ကန်စွာမှတ်ပုံတင်ပြီးထွက်ပါ။

  • SPL_Autoload_Unregister ကိုခေါ်ဆိုသည့်အခါ function ကိုမှတ်ပုံတင်ခြင်းရှိမရှိကို ဦး စွာအတည်ပြုပါ။

  • Phpunit ကဲ့သို့သော PHPunit ကဲ့သို့သော bramework ကဲ့သို့သော fraok method ကိုသုံးပါ။

ဤနည်းလမ်းများမှတစ်ဆင့် spl_autoload_Unregister အမှားကိုထိရောက်စွာရှောင်ရှားနိုင်ပြီးစည်းမျဉ်းစည်းကမ်းများကိုတည်ငြိမ်မှုနှင့်ထိန်းသိမ်းခြင်းတို့ကိုလည်းတိုးတက်စေနိုင်သည်။