လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> SPL_AUTOLOAD_UNREGITNES ကိုပေါင်းစပ်ပါ

SPL_AUTOLOAD_UNREGITNES ကိုပေါင်းစပ်ပါ

gitbox 2025-05-29

PHP စီမံကိန်းများတွင်အလိုအလျှောက်တင်ဆောင်လာသောယန္တရားသည်အလွန်အရေးကြီးသည်, PHP သည် spl_autoload_register နှင့် spl_autoload_Unregister ကို Autooloaders များကိုစီမံရန်လုပ်ဆောင်သည်။ ဤဆောင်းပါးသည်စာတန်းများကို 0 ယ်ယူရန်ပ conflicts ိပက် ခများကိုရှောင်ရှားရန် Namespaces ကိုမည်သို့ပေါင်းစပ်ပြီးမှန်ကန်စွာအသုံးပြုရမည်ကိုအာရုံစိုက်မည်။


Spl_autoload_Unregisterregister ဆိုတာဘာလဲ

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 ကိုမည်သို့မှတ်ပုံတင်ရမည်ကိုပြသသည်။


အဘယ်ကြောင့် namespace နှင့်အတူပေါင်းစပ်အတွက်အသုံးပြုပါ

Modern PHP စီမံကိန်းများတွင် Namespaces သည်ကျွန်ုပ်တို့၏ကုဒ်များကို စုစည်း. Class Name ပ conflicts ိပက်ခများကိုရှောင်ရှားရန်အလွန်ကူညီပေးပါ။ သို့သော်အမည်စာရင်းတင်သွင်းမှုသည်အလိုအလျောက်ပ conflicts ိပက်ခများအကြားပ conflicts ိပက်ခများကိုအလိုအလျောက်ရှောင်ကြဉ်ခြင်းမဟုတ်ပါ,

စီမံကိန်းတွင် autooloaders နှစ်ခုကိုကွဲပြားခြားနားသော namespaces များအောက်တွင် 0 င်ရောက်နိုင်သည့် Autoloaders နှစ်ခုရှိသည်ဆိုပါစို့။ အကယ်. autoloaders များထဲမှတစ်ခုမှန်ကန်စွာ log in လုပ်ခြင်းမရှိပါကမှားယွင်းသောလူတန်းစားကိုဖွင့်နိုင်သည်။


namespaces နှင့်ပေါင်းစပ်မှန်ကန်သောအသုံးပြုမှုအတွက်ဥပမာများ

ဤနေရာတွင် 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 မှတဆင့်ဝင်ရောက်နိုင်သည်။


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

  1. logging လုပ်တဲ့အခါမှာ 0 င်လာတဲ့ function name (သို့) callback ဟာမှတ်ပုံတင်ချိန်နဲ့ကိုက်ညီအောင်သေချာအောင်လုပ်ဖို့လိုတယ်။

  2. namespace ကိုသုံးသောအခါ autooloader ၏ function name သည်အပြည့်အဝ namespace ပါ 0 င်ရန်လိုအပ်သည်။

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

  4. autoloader ကိုမထုတ်ယူမီ, autooloader သည်ပ conflict ိပက်ခ၏အရင်းအမြစ်အမှန်ဖြစ်ကြောင်းသေချာအောင်လုပ်ပါ။

  5. အလိုအလျောက် loader ၏အမိန့်သည် loading logic ကိုအကျိုးသက်ရောက်လိမ့်မည်။


အကျဉ်းချုပ်

NAMSTARE နှင့် SPL_AUTOLOADOAD_UNREGIDNES ကို ပေါင်းစပ်ခြင်းအားဖြင့်ကွဲပြားခြားနားသော module များသို့မဟုတ် third-party libraries များ၌အတန်းအစားများပ conflicts ိပက်ခများကိုရှောင်ရှားရန် Autoloaders မျိုးစုံကိုထိရောက်စွာစီမံနိုင်ခဲ့သည်။ ဆွေးနွေးမှုစနစ်သည်အလိုအလျောက် loader ၏ယုတ္တိဗေဒကိုဒီဇိုင်းဆွဲခြင်းနှင့် Namespace တာဝန်များကိုရှင်းလင်းခြင်းနှင့်ကွဲလွဲသောအလိုအလျောက် 0 န်ဆောင်မှုများကိုပြောင်းလဲခြင်းသည် PHP applications များ၏တည်ငြိမ်မှုကိုထိန်းသိမ်းရန်သော့ချက်ဖြစ်သည်။