PHP စီမံကိန်းများတွင်အလိုအလျှောက်တင်ဆောင်လာသောယန္တရားသည်အလွန်အရေးကြီးသည်, PHP သည် spl_autoload_register နှင့် spl_autoload_Unregister ကို Autooloaders များကိုစီမံရန်လုပ်ဆောင်သည်။ ဤဆောင်းပါးသည်စာတန်းများကို 0 ယ်ယူရန်ပ conflicts ိပက် ခများကိုရှောင်ရှားရန် Namespaces ကိုမည်သို့ပေါင်းစပ်ပြီးမှန်ကန်စွာအသုံးပြုရမည်ကိုအာရုံစိုက်မည်။
spl_autoload_Unregise ကို မှတ်ပုံတင်ထားသော Autoload function ကိုထွက်ရန်အသုံးပြုသည်။ autoloader တစ်ခုထုတ်ယူခြင်းအားဖြင့် autoloader သည်မိတ္တူကူးခြင်းများကိုမတင်နိုင်ပါကပ conflicts ိပက်ခများကိုလျော့နည်းစေသည်။
<?php
// အလိုအလျောက်တင်ထားသောလုပ်ဆောင်ချက်တစ်ခုမှတ်ပုံတင်ထားပါသည်ဆိုပါစို့
function myAutoloader($class) {
include 'gitbox.net/classes/' . $class . '.php';
}
spl_autoload_register('myAutoloader');
// အလိုအလျောက် Loading function ကိုမှထွက်ပါ
spl_autoload_unregister('myAutoloader');
?>
အထက်ပါဥပမာသည် Autoloading function ကိုမည်သို့မှတ်ပုံတင်ရမည်ကိုပြသသည်။
Modern PHP စီမံကိန်းများတွင် Namespaces သည်ကျွန်ုပ်တို့၏ကုဒ်များကို စုစည်း. Class Name ပ conflicts ိပက်ခများကိုရှောင်ရှားရန်အလွန်ကူညီပေးပါ။ သို့သော်အမည်စာရင်းတင်သွင်းမှုသည်အလိုအလျောက်ပ conflicts ိပက်ခများအကြားပ conflicts ိပက်ခများကိုအလိုအလျောက်ရှောင်ကြဉ်ခြင်းမဟုတ်ပါ,
စီမံကိန်းတွင် autooloaders နှစ်ခုကိုကွဲပြားခြားနားသော namespaces များအောက်တွင် 0 င်ရောက်နိုင်သည့် Autoloaders နှစ်ခုရှိသည်ဆိုပါစို့။ အကယ်. autoloaders များထဲမှတစ်ခုမှန်ကန်စွာ log in လုပ်ခြင်းမရှိပါကမှားယွင်းသောလူတန်းစားကိုဖွင့်နိုင်သည်။
ဤနေရာတွင် namespaces များကိုပေါင်းစပ်။ spl_autoload_Unregister ထွက်ခြင်း၏ဥပမာတစ်ခုမှာဥပမာတစ်ခုဖြစ်သည်။
<?php
namespace ProjectA;
function autoloadProjectA($class) {
// သာဝန် ProjectA namespace အောက်မှာအတန်း
if (strpos($class, __NAMESPACE__ . '\\') === 0) {
$classPath = str_replace(__NAMESPACE__ . '\\', '', $class);
include 'gitbox.net/projectA/' . str_replace('\\', '/', $classPath) . '.php';
}
}
namespace ProjectB;
function autoloadProjectB($class) {
// သာဝန် ProjectB namespace အောက်မှာအတန်း
if (strpos($class, __NAMESPACE__ . '\\') === 0) {
$classPath = str_replace(__NAMESPACE__ . '\\', '', $class);
include 'gitbox.net/projectB/' . str_replace('\\', '/', $classPath) . '.php';
}
}
// autoloader မှတ်ပုံတင်ပါ
spl_autoload_register('ProjectA\autoloadProjectA');
spl_autoload_register('ProjectB\autoloadProjectB');
// ဥပမာအားဖြင့်,ယာယီမသန်စွမ်းခံရဖို့လိုအပ်ပါတယ် ProjectB Autoloader,ပ conflicts ိပက်ခများကိုတားဆီးပါ
spl_autoload_unregister('ProjectB\autoloadProjectB');
?>
ဒီဥပမာမှာ -
namespace တစ်ခုစီတွင်ကိုယ်ပိုင်သီးသန့် autoledoader ရှိသည်။
အလိုအလျောက် loader function သည်အတန်းအစားအမည်သည်၎င်း၏ကိုယ်ပိုင် namespace နှင့်သက်ဆိုင်သည်ကိုဆုံးဖြတ်ခြင်းအားဖြင့်ဖွင့်ရန်ဆုံးဖြတ်သည်။
ပ conflict ိပက်ခတစ်ခုကိုရှာဖွေတွေ့ရှိသောအခါအချို့သော autoloader သည်ပ conflicts ိပက်ခများတင်ခြင်းကိုရှောင်ရှားရန် SPL_AUTOLOAD_UNGIAND မှတဆင့်ဝင်ရောက်နိုင်သည်။
logging လုပ်တဲ့အခါမှာ 0 င်လာတဲ့ function name (သို့) callback ဟာမှတ်ပုံတင်ချိန်နဲ့ကိုက်ညီအောင်သေချာအောင်လုပ်ဖို့လိုတယ်။
namespace ကိုသုံးသောအခါ autooloader ၏ function name သည်အပြည့်အဝ namespace ပါ 0 င်ရန်လိုအပ်သည်။
အကယ်. သင်သည်အမည်မသိသောလုပ်ဆောင်ချက်များကိုအလိုအလျောက် loader အဖြစ်အသုံးပြုပါကထုတ်လွှတ်သည့်အခါ ပို. ခက်ခဲလိမ့်မည်။ ထို့ကြောင့်အမည်ရှိလုပ်ဆောင်မှုများကိုအသုံးပြုရန်အကြံပြုသည်။
autoloader ကိုမထုတ်ယူမီ, autooloader သည်ပ conflict ိပက်ခ၏အရင်းအမြစ်အမှန်ဖြစ်ကြောင်းသေချာအောင်လုပ်ပါ။
အလိုအလျောက် loader ၏အမိန့်သည် loading logic ကိုအကျိုးသက်ရောက်လိမ့်မည်။
NAMSTARE နှင့် SPL_AUTOLOADOAD_UNREGIDNES ကို ပေါင်းစပ်ခြင်းအားဖြင့်ကွဲပြားခြားနားသော module များသို့မဟုတ် third-party libraries များ၌အတန်းအစားများပ conflicts ိပက်ခများကိုရှောင်ရှားရန် Autoloaders မျိုးစုံကိုထိရောက်စွာစီမံနိုင်ခဲ့သည်။ ဆွေးနွေးမှုစနစ်သည်အလိုအလျောက် loader ၏ယုတ္တိဗေဒကိုဒီဇိုင်းဆွဲခြင်းနှင့် Namespace တာဝန်များကိုရှင်းလင်းခြင်းနှင့်ကွဲလွဲသောအလိုအလျောက် 0 န်ဆောင်မှုများကိုပြောင်းလဲခြင်းသည် PHP applications များ၏တည်ငြိမ်မှုကိုထိန်းသိမ်းရန်သော့ချက်ဖြစ်သည်။