PHP ပရိုဂရမ်တွင် Spl_autoload_register နှင့် Spl_autoload_Unregister တွင် Automatic Class Loading ကိုကိုင်တွယ်ရန်အသုံးပြုသောစံကိရိယာများဖြစ်သည်။ SPL_Autoload_register သည် developer များကိုအလိုအလျောက်တင်ထားသောလုပ်ဆောင်မှုများကိုမှတ်ပုံတင်ရန်ခွင့်ပြုသည်။ spl_autoload_Unregise ကို မှတ်ပုံတင်ထားသော Autoload လုပ်ဆောင်ချက်များကိုဖယ်ရှားရန်အသုံးပြုသည်။
သို့သော်ယူနစ်စစ်ဆေးမှုပြုလုပ်ရာတွင် Spl_Autoload_Unregister ကို အသုံးပြုသောအခါ spl_autoload_Unrogister ကိုအသုံးပြုသောအခါအမှားအယွင်းများကိုသင်ကြုံတွေ့ရလိမ့်မည်။ ဤဆောင်းပါးသည်ဤအမှားအယွင်းများကိုထိရောက်စွာရှောင်ရှားရန်နှင့်ဖြေရှင်းရန်အတိမ်အနက်ကိုလေ့လာပါမည်။
ပထမ ဦး စွာ Spl_autoload_Unrigister အမှားအတွက်အကြောင်းပြချက်ကိုနားလည်ရန်အလွန်အရေးကြီးသည်။ PHP တွင် SPP တွင် Spl_autoload_Unregise သည် spl_autoload_register ဖြင့်မှတ်ပုံတင်ထားသော autoload လုပ်ဆောင်ချက်များကိုသာဖယ်ရှားနိုင်သည်။ အကယ်. function သည် autoutoad stack တွင်မတည်ရှိပါက spl_autoload_Unregise ကို ခေါ်ဆိုရန်ကြိုးစားခြင်းသည်အမှားတစ်ခုဖြစ်ပေါ်လိမ့်မည်။
ဘုံအမှားအခြေအနေများတွင်:
spl_autoload_Unregister ဟုခေါ်သည်။ သို့သော်မှတ်ပုံတင်ထားသောလုပ်ဆောင်ချက်မရှိပါ ။ အကယ်. သင်သည်မတည်ရှိသော autoload function ကိုသင်ဖယ်ရှားလိုက်လျှင်ဤအမှားအယွင်းရှိသည်။
လုပ်ဆောင်ချက်များ၏အလိုအလျောက်တင်၏အမိန့် ။ PHP သည်အလိုအလျှောက်တွင်အလိုအလျောက်တင်ထားသောလုပ်ငန်းဆောင်တာများကိုအလိုအလျောက်ဖွင့်ထားသည့်အမိန့်ကိုဆက်လက်ထိန်းသိမ်းထားသည်ဆိုပါကသင်၏စစ်ဆေးမှုများသည်မှတ်ပုံတင်ခြင်းနှင့်ပို့ကုန်မျိုးစုံအကြားမှန်ကန်သောအမိန့်မရှိပါ
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 ကိုမှတ်ပုံတင်ခြင်းမရှိဘဲခေါ်ဆိုခြင်းမပြုဘဲအမှားအယွင်းများကိုထိရောက်စွာတားဆီးနိုင်သည်။
ယူနစ်စစ်ဆေးမှုတွင်ကမ္ဘာပေါ်တွင်အလိုအလျောက်တင်ထားသောလုပ်ဆောင်မှုများကိုမှတ်ပုံတင်ခြင်းမပြုရန်ရှောင်ပါ။ 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>
Autoload function တစ်ခုစီကိုတစ်ကြိမ်တည်းသာမှတ်ပုံတင်ထားကြောင်းသေချာပါစေ။ အကယ်. သင်သည်မတူညီသောစမ်းသပ်မှုအမှုများသို့မဟုတ်စမ်းသပ်အစုံတွင် Autoload function ကိုထပ်တလဲလဲမှတ်ပုံတင်ပါက၎င်းသည်မလိုအပ်သောပ conflicts ိပက်ခများသို့မဟုတ်အမှားများကိုဖြစ်ပေါ်စေနိုင်သည်။ autooloading လုပ်ချိန်ညှိသောအခါ, function ကိုတစ်ကြိမ်တည်းသာမှတ်ပုံတင်ပြီးသန့်ရှင်းရေးလုပ်ခြင်းကိုမှန်ကန်စွာလုပ်ဆောင်ပါ။
အကယ်. သင်သည် spl_autoload_Unregister အမှားကိုသင်တွေ့ကြုံခဲ့ပါကဤနေရာတွင်ဘုံဖြေရှင်းနည်းများဖြစ်သည်။
ပထမ ဦး စွာ Spl_autoload_Unregister ဟုခေါ်သောအခါ, ပစ်မှတ် autoload function ကိုအောင်မြင်စွာမှတ်ပုံတင်ထားကြောင်းအတည်ပြုပါ။ target function ကိုအမှန်တကယ်တည်ရှိမလားကြည့်ရှုရန်လက်ရှိမှတ်ပုံတင်ထားသော Autoload function list ကိုစစ်ဆေးရန် Spl_Autoload_rofunctions ကို သုံးပါ။
အကယ်. 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 ကိုမှတ်ပုံတင်မထားသည့်အခါအမှားအယွင်းများကိုပစ်ချလိမ့်မည်မဟုတ်ပါ။
ရှုပ်ထွေးသောစစ်ဆေးမှုပတ် 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 ကိုအလိုအလျောက်သန့်ရှင်းအောင်ပြုလုပ်နိုင်သည်,
PHP spl_autoload_Unregister အမှားသည်များသောအားဖြင့် autoload function ၏မှတ်ပုံတင်ခြင်းနှင့်ဖျက်သိမ်းခြင်းအမိန့်သို့မဟုတ်မှတ်ပုံတင်ထားခြင်းမရှိသော autoload function ကိုထွက်ရန်ကြိုးပမ်းမှုမှပြုလုပ်သည်။ ယူနစ်စမ်းသပ်ခြင်းတွင်အကောင်းဆုံးနည်းလမ်းမှာ -
စမ်းသပ်မှုအမှုတစ်ခုချင်းစီမတိုင်မီနှင့်ပြီးနောက် Autoload လုပ်ဆောင်မှုကိုမှန်ကန်စွာမှတ်ပုံတင်ပြီးထွက်ပါ။
SPL_Autoload_Unregister ကိုခေါ်ဆိုသည့်အခါ function ကိုမှတ်ပုံတင်ခြင်းရှိမရှိကို ဦး စွာအတည်ပြုပါ။
Phpunit ကဲ့သို့သော PHPunit ကဲ့သို့သော bramework ကဲ့သို့သော fraok method ကိုသုံးပါ။
ဤနည်းလမ်းများမှတစ်ဆင့် spl_autoload_Unregister အမှားကိုထိရောက်စွာရှောင်ရှားနိုင်ပြီးစည်းမျဉ်းစည်းကမ်းများကိုတည်ငြိမ်မှုနှင့်ထိန်းသိမ်းခြင်းတို့ကိုလည်းတိုးတက်စေနိုင်သည်။