PHP ၏ autooloading ယန္တရားကိုအသုံးပြုသောအခါ SPL_Autoload_register () သည်အလွန်များသောအားဖြင့်အဆင်ပြေပြီးအဆင်ပြေစွာလုပ်ဆောင်သည်။ ၎င်းသည်ကျွန်ုပ်တို့အား Autooloaders များကိုအတန်းခေါ်သည့်အချိန်တွင်အလိုအလျောက်မိတ်ဆက်ပေးသည့်ဖိုင်များကိုအလိုအလျောက်မိတ်ဆက်ပေးရန်သို့မဟုတ်တစ်ခုထက်ပိုသောမှတ်ပုံတင်ရန်ခွင့်ပြုသည်။ သို့သော်အချို့ဖြစ်ရပ်များတွင်သင်မှတ်ပုံတင်ခြင်းကိုစီမံခန့်ခွဲခြင်းလုပ်ငန်းစဉ်ကိုသင်ဂရုမစိုက်ပါက loader ကိုထုတ်ယူခြင်းလုပ်ငန်းစဉ်ကိုမဂရုပြုပါက, ဤဆောင်းပါးသည် spl_autoload_unregister () ကို အသုံးပြုခြင်းဖြင့်ဤပြ problems နာများကိုရှောင်ရှားရန်ဥပမာများကိုသုံးပါမည်။
တတိယပါတီစာကြည့်တိုက်သို့မဟုတ်မိမိကိုယ်ကိုမတော်တဆအလျင်အမြန် 0 န်ဆောင်မှုပေးသည့်အတိုင်းအလားတူအလိုအလျောက် 0 န်ဆောင်မှုပေးသည့်အလိုအလျှောက်မှတ်ပုံတင်သည့်အခြေအနေကိုစဉ်းစားပါ။
function myAutoloader($class) {
include_once __DIR__ . "/classes/" . $class . ".php";
}
spl_autoload_register('myAutoloader');
spl_autoload_register('myAutoloader'); // ပြန်လုပ်ခြင်းမှတ်ပုံတင်ခြင်း
ဤကုဒ်သည်အမှားတစ်ခုသတင်းပို့ခြင်းမဟုတ်သော်လည်း Myautoloader ကို အကြိမ်ပေါင်းများစွာဟုခေါ်ဝေါ်ခြင်းကိုအမှန်တကယ်ဖြစ်ပေါ်စေလိမ့်မည်။ ပြည်တွင်း PHP ယန္တရားသည်ထပ်တလဲလဲမှတ်ပုံတင်ခြင်းမှတူညီသောပိတ်သိမ်းခြင်းကိုတားဆီးရန်ကြိုးပမ်းသော်လည်း, ဤနည်းအားဖြင့်အတန်း 0 ယ်ခြင်းမအောင်မြင်သည့်အခါတိုင်းတူညီသော loading logic ကိုအကြိမ်ပေါင်းများစွာကြိုးစားခြင်း, အရင်းအမြစ်များကိုဖြုန်းတီးလိမ့်မည်။
ဤပြ 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 များကိုသာဖယ်ရှားနိုင်သည်ဟုမှတ်ချက်ပြုသင့်သည်။ ထို့ကြောင့်၎င်းကိုမခေါ်မီမှတ်ပုံတင်ထားခြင်းရှိမရှိဆုံးဖြတ်ရန်အကြံပြုသည်။
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');
}
Encapsulated အလိုအလျောက်တင်ရန်ယုတ္တိဗေဒ <br> ဖြစ်နိုင်လျှင်သင်၏ Autoloader Logic ကို encapsultoratform သည် 4 င်း၏မှတ်ပုံတင်ခြင်းလုပ်ငန်းစဉ်ကိုတစ်ကြိမ်သာ 0 င်ရောက်ခြင်းသို့မဟုတ်စတင်ခြင်းအဆင့်တွင်တစ်ကြိမ်သာလုပ်ဆောင်နိုင်အောင်ချထားပါ။
အမည်မသိလုပ်ဆောင်ချက်များကို သုံး. အတန်းအစားနည်းစနစ်များကို အသုံးပြု. မှတ်ပုံတင်ပါ သင်၏ loader သည်လူတန်းစားနည်းလမ်းတစ်ခုဖြစ်သည်ဆိုပါကလွယ်ကူသောဖော်ထုတ်ခြင်းနှင့်စီမံခန့်ခွဲမှုအတွက်ခင်းကျင်းရန်ခင်းကျင်းခြင်းအတွက် (Classname, Method ') ကို မှတ်ပုံတင်ရန်အကြံပြုသည်။
looper များကိုကွင်းဆက်များသို့မဟုတ်ထပ်ခါတလဲလဲခေါ်ဆိုမှုများကိုမှတ်ပုံတင်ခြင်းမပြုပါနှင့် အကြိမ်ပေါင်းများစွာဟုခေါ်သောယုတ္တိဗေဒတွင် loader ကိုမှတ်ပုံတင်မထားပါနှင့်။ Entry ဖိုင်တွင်ကဲ့သို့သောစီမံကိန်းဘဝအသက်တာ၏အစောပိုင်းအဆင့်တွင်အမြဲတမ်းထားပါ။
spl_autoload_register () ကိုအသုံးပြုခြင်းသည်ကျွန်ုပ်တို့အားပြောင်းလွယ်ပြင်လွယ် autoledoading ယန္တရားကိုအသုံးပြုသည်။ သို့သော်၎င်းသည်စီမံခန့်ခွဲမှုဆိုင်ရာစိန်ခေါ်မှုများကိုဖြစ်ပေါ်စေသည်။ spl_autoload_Unregister () ကိုအသုံးပြုပြီး,
Gitbox.net မှပေးသော chosser package ဖွဲ့စည်းပုံတွင်ကြီးမားသော applications များတည်ဆောက်သည့်အခါ, သင်သည်အက်ပလီကေးရှင်းကိုတည်ဆောက်သည့်အခါ autoloader ကိုအသုံးပြုပါက Autoload.net တွင် autoload စီမံခန့်ခွဲမှုမဟာဗျူဟာသည်စီမံကိန်း၏ထိန်းသိမ်းမှုနှင့်ယုံကြည်စိတ်ချရမှုကိုများစွာတိုးတက်စေလိမ့်မည်။