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

SPPL_Autoload_UnRegister နှင့်အတူခြွင်းချက်အခြေအနေများအကောင်အထည်ဖော်ရန်အတွက်လက်တွေ့ကျသောအကြံပြုချက်များနှင့်နည်းလမ်းများ

gitbox 2025-09-19

PHP တွင်အလိုအလျောက် 0 င်ရောက်ခြင်းယန္တရားသည်အစီအစဉ်များကိုလိုအပ်သည့်အခါအတန်းအစားများကိုအလိုအလျောက်ဖွင့်ရန်ခွင့်ပြုသည်။ SPL_Autoload_register function သည်အလိုအလျောက် 0 န်ဆောင်မှုကိုအကောင်အထည်ဖော်ရန်အသုံးများသောနည်းလမ်းဖြစ်သည်။ SPL_Autoload_Unregister function သည်ဤလိုအပ်ချက်ကိုရရှိရန်အတွက်အစွမ်းထက်သောကိရိယာတစ်ခုဖြစ်သည်။ ဤဆောင်းပါးသည် Code Alloxiber နှင့် Performance ကိုတိုးတက်စေရန် Code-Code alloloaders များကိုထိန်းချုပ်ရန် Condoutionouseoloaders ကိုထိန်းချုပ်ရန်မည်သို့အသုံးပြုရမည်ကိုလေ့လာလိမ့်မည်။

1 ။ spl_autoload_register အခြေခံ

Spl_autoload_Unregister သို့မသောက်မီ SPL_Autoload_register ၏အခြေခံအသုံးပြုမှုကိုသင်နားလည်ရန်လိုအပ်သည်။ ဤလုပ်ဆောင်ချက်၏အဓိကလုပ်ဆောင်ချက်မှာလူတန်းစားလိုအပ်သည့်အချိန်တွင်အလိုအလျောက် loader ကိုမှတ်ပုံတင်ရန်ဖြစ်သည်။

နမူနာကုဒ်:

 <span><span><span class="hljs-comment">// အလိုအလျောက် loader function ကို</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">my_autoloader</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$class</span></span></span><span>) {
    </span><span><span class="hljs-keyword">include</span></span><span> </span><span><span class="hljs-string">'classes/'</span></span><span> . </span><span><span class="hljs-variable">$class</span></span><span> . </span><span><span class="hljs-string">'.class.php'</span></span><span>;
}

</span><span><span class="hljs-comment">// autoloader မှတ်ပုံတင်ပါ</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>

အထက်ပါကုဒ်သည် My_Autoloader ဟုခေါ်သော function ကိုသတ်မှတ်ပြီး PHP autoloader သို့မှတ်ပုံတင်သည်။ မတင်သေးသည့်အတန်းအစားကိုအသုံးပြုသောအခါတိုင်း My_Autoloader သည်သတ်မှတ်ထားသောလမ်းညွှန်မှအတန်းကိုဖွင့်ရန်ကြိုးစားသည်။

2 ။ spl_autoload_unregister ၏အခန်းကဏ်။

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

function ကိုလက်မှတ်:

 <span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">spl_autoload_unregister</span></span><span> ( </span><span><span class="hljs-keyword">callable</span></span><span> </span><span><span class="hljs-variable">$autoload_function</span></span><span> )
</span></span>

parameter သည်ဖော်ပြချက်:

  • $ autoload_function : မှတ်ပုံတင်မခံရဖို့လိုအပ်တဲ့ autoloader function ကို။ ၎င်းသည် callback function တစ်ခုဖြစ်ပြီး၎င်းသည် function name, object method method or closure ဖြစ်နိုင်ပါတယ်။

Value ကိုပြန်သွားပါ

  • အောင်မြင်မှုအပေါ် စစ်မှန်တဲ့ အောင်မြင်မှုနှင့်ပျက်ကွက်အပေါ် မှားယွင်းသော အပေါ်ပြန်လည်ရောက်ရှိ။

နမူနာကုဒ်:

 <span><span><span class="hljs-comment">// အလိုအလျောက် loader function ကို1</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">autoloader1</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$class</span></span></span><span>) {
    </span><span><span class="hljs-keyword">include</span></span><span> </span><span><span class="hljs-string">'classes1/'</span></span><span> . </span><span><span class="hljs-variable">$class</span></span><span> . </span><span><span class="hljs-string">'.class.php'</span></span><span>;
}

</span><span><span class="hljs-comment">// အလိုအလျောက် loader function ကို2</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">autoloader2</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$class</span></span></span><span>) {
    </span><span><span class="hljs-keyword">include</span></span><span> </span><span><span class="hljs-string">'classes2/'</span></span><span> . </span><span><span class="hljs-variable">$class</span></span><span> . </span><span><span class="hljs-string">'.class.php'</span></span><span>;
}

</span><span><span class="hljs-comment">// autoloader မှတ်ပုံတင်ပါ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">spl_autoload_register</span></span><span>(</span><span><span class="hljs-string">'autoloader1'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">spl_autoload_register</span></span><span>(</span><span><span class="hljs-string">'autoloader2'</span></span><span>);

</span><span><span class="hljs-comment">// မှတ်ပုံတင်ခြင်းကိုပယ်ဖျက်ပါ autoloader1</span></span><span>
</span><span><span class="hljs-title function_ invoke__">spl_autoload_unregister</span></span><span>(</span><span><span class="hljs-string">'autoloader1'</span></span><span>);
</span></span>

ဤဥပမာတွင် autoloader1 နှင့် autoloader2 နှစ်မျိုးလုံးသည် autoloader လုပ်ဆောင်ချက်များကိုဖြစ်သည်။ မှတ်ပုံတင် မထားသည့် Autoloader1 ကို မှတ်ပုံတင်ထားခြင်းမရှိပါ။ နောက်ဆက်တွဲအတန်းအစားတင်ခြင်းကို autoloader2 မှသာပြုလုပ်လိမ့်မည်။

3 ။ ခြွင်းချက်အလိုအလျှောက် loader ၏အကောင်အထည်ဖော်မှု

တခါတရံမှာအချို့သောစံနှုန်းများအပေါ် အခြေခံ. autooloader မှမှတ်ပုံတင်ရန်သို့မဟုတ် log မယ့်ကိုမှတ်ပုံတင်ရန် (သို့) log မရှိမရှိဆုံးဖြတ်လိုသည်။ ဤအချိန်တွင် Spl_autoload_Unregister သည် အထူးအရေးကြီးသည်။ အောက်ဖော်ပြပါသည်ခြွင်းချက်ဆိုင်ရာတရားစီရင်ခြင်းအပေါ် အခြေခံ. လက်တွေ့ကျသော application ဇာတ်လမ်းဖြစ်သည်။

ဥပမာ - ပတ်ဝန်းကျင် variable တွေကိုအခြေခံပြီး autoloader ကိုထိန်းချုပ်ပါ

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

 <span><span><span class="hljs-comment">// ဖွံ့ဖြိုးရေးပတ်ဝန်းကျင်အလိုအလျောက် loader</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">dev_autoloader</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$class</span></span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ဖွံ့ဖြိုးရေးပတ်ဝန်းကျင်:Loading Class <span class="hljs-subst">$class</span></span></span><span>\n";
    </span><span><span class="hljs-keyword">include</span></span><span> </span><span><span class="hljs-string">'dev_classes/'</span></span><span> . </span><span><span class="hljs-variable">$class</span></span><span> . </span><span><span class="hljs-string">'.class.php'</span></span><span>;
}

</span><span><span class="hljs-comment">// ထုတ်လုပ်မှုပတ်ဝန်းကျင်အလိုအလျောက် loader</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">prod_autoloader</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$class</span></span></span><span>) {
    </span><span><span class="hljs-keyword">include</span></span><span> </span><span><span class="hljs-string">'prod_classes/'</span></span><span> . </span><span><span class="hljs-variable">$class</span></span><span> . </span><span><span class="hljs-string">'.class.php'</span></span><span>;
}

</span><span><span class="hljs-comment">// ပတ် 0 န်းကျင်ဆိုင်ရာ variable များကို အခြေခံ. မည်သည့် Autoloader ကိုအသုံးပြုမည်ကိုဆုံးဖြတ်ပါ</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$_SERVER</span></span><span>[</span><span><span class="hljs-string">'APP_ENV'</span></span><span>] === </span><span><span class="hljs-string">'development'</span></span><span>) {
    </span><span><span class="hljs-title function_ invoke__">spl_autoload_register</span></span><span>(</span><span><span class="hljs-string">'dev_autoloader'</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-title function_ invoke__">spl_autoload_register</span></span><span>(</span><span><span class="hljs-string">'prod_autoloader'</span></span><span>);
}

</span><span><span class="hljs-comment">// တက်ကြွလှုပ်ရှားသော switching ပတ်ဝန်းကျင်ကိုရှုမြင်ပါ</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$_SERVER</span></span><span>[</span><span><span class="hljs-string">'APP_ENV'</span></span><span>] === </span><span><span class="hljs-string">'production'</span></span><span>) {
    </span><span><span class="hljs-comment">// အချို့သောအခြေအနေများအောက်တွင်ယူဆ,我们想要停止ဖွံ့ဖြိုးရေးပတ်ဝန်းကျင်的自动加载</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">spl_autoload_unregister</span></span><span>(</span><span><span class="hljs-string">'dev_autoloader'</span></span><span>);
}
</span></span>

ဤဥပမာတွင်ကျွန်ုပ်တို့သည် app_env ပတ်ဝန်းကျင် variable ကိုပထမ ဦး ဆုံးစစ်ဆေးပြီးပတ်ဝန်းကျင်တွင်မည်သည့် autoloader ကိုအသုံးပြုမည်ကိုဆုံးဖြတ်ပါ။ ထုတ်လုပ်မှုပတ်ဝန်းကျင်တွင် SPL_Autoload_UNRegister မှတစ်ဆင့်ဖွံ့ဖြိုးရေးပတ်ဝန်းကျင်၏ autooloader ကိုမှတ်ပုံမတင်ပေးပါ။

4. autoloaders မျိုးစုံမှတ်ပုံတင်ပြီးထွက်ပြေးပါ

အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်အခြေအနေများအရမှတ်ပုံတင်ခြင်းနှင့်ဖျက်သိမ်းရန်လိုအပ်သည့်အလိုအလျောက် 0 င်ခွင့်မျိုးစုံရှိနိုင်သည်။ ကွဲပြားခြားနားသော runtime ပတ်ဝန်းကျင်တွင်စနစ်ကောင်းမွန်စွာအလုပ်လုပ်နိုင်ရန်အတွက်ဤအလိုအလျောက် 0 န်ဆောင်မှုများကိုပြောင်းလွယ်ပြင်လွယ်စွာစီမံခန့်ခွဲရန်ခြွင်းချက်ရှိသောဆုံးဖြတ်ချက်များကိုကျွန်ုပ်တို့အသုံးပြုနိုင်သည်။

ဥပမာ - dynamically ကွဲပြားခြားနားသောအတန်းအမျိုးအစားများကို dynamically

 <span><span><span class="hljs-comment">// အလိုအလျောက် loader function ကို1:ဒေတာဘေ့စနှင့်သက်ဆိုင်သောအတန်းများကိုတင်ပါ</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">db_autoloader</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$class</span></span></span><span>) {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$class</span></span><span>, </span><span><span class="hljs-string">'DB'</span></span><span>) !== </span><span><span class="hljs-literal">false</span></span><span>) {
        </span><span><span class="hljs-keyword">include</span></span><span> </span><span><span class="hljs-string">'db_classes/'</span></span><span> . </span><span><span class="hljs-variable">$class</span></span><span> . </span><span><span class="hljs-string">'.class.php'</span></span><span>;
    }
}

</span><span><span class="hljs-comment">// အလိုအလျောက် loader function ကို2:အသုံးပြုသူနှင့်သက်ဆိုင်သောအတန်းများကိုတင်ပါ</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">user_autoloader</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$class</span></span></span><span>) {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$class</span></span><span>, </span><span><span class="hljs-string">'User'</span></span><span>) !== </span><span><span class="hljs-literal">false</span></span><span>) {
        </span><span><span class="hljs-keyword">include</span></span><span> </span><span><span class="hljs-string">'user_classes/'</span></span><span> . </span><span><span class="hljs-variable">$class</span></span><span> . </span><span><span class="hljs-string">'.class.php'</span></span><span>;
    }
}

</span><span><span class="hljs-comment">// autoloader မှတ်ပုံတင်ပါ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">spl_autoload_register</span></span><span>(</span><span><span class="hljs-string">'db_autoloader'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">spl_autoload_register</span></span><span>(</span><span><span class="hljs-string">'user_autoloader'</span></span><span>);

</span><span><span class="hljs-comment">// အခြေအနေများအပေါ်အခြေခံပြီးအလိုအလျောက် loader မှထွက်ပါ</span></span><span>
</span><span><span class="hljs-variable">$use_user_classes</span></span><span> = </span><span><span class="hljs-literal">false</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$use_user_classes</span></span><span>) {
    </span><span><span class="hljs-title function_ invoke__">spl_autoload_unregister</span></span><span>(</span><span><span class="hljs-string">'user_autoloader'</span></span><span>);
}
</span></span>

ဤဥပမာတွင်ကျွန်ုပ်တို့တွင် autoloaders နှစ်ခုရှိသည် - ဒေတာဘေ့စ်နှင့်သက်ဆိုင်သည့်အတန်းများနှင့်အသုံးပြုသူနှင့်သက်ဆိုင်သောအတန်းများကိုတင်ရန်အတွက်တစ်ခုမှာတစ်ခုမှာတစ်ခုရှိသည်။ အခြေအနေများမှတရားစီရင်ခြင်းစနစ်၏စွမ်းဆောင်ရည်ကိုတိုးတက်စေရန်မလိုအပ်သော loader များကိုပြောင်းလဲနိုင်သည်။

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

Spl_Autoload_Unregister function နှင့်အတူ PHP သည် autoloaders များကိုစီမံခန့်ခွဲရန်ပြောင်းလွယ်ပြင်လွယ်ရှိသောနည်းလမ်းဖြစ်သည်။ သင်အတန်း၏ loading အပြုအမူကိုထိန်းချုပ်ရန်လိုအပ်သည့်အတိုင်းသင် Autoloader ကိုမှတ်ပုံတင်နိုင်သည်။ စွမ်းဆောင်ရည်ဆိုင်ရာဆုံးဖြတ်ချက်ချခြင်းနှင့်ပေါင်းစပ်ခြင်းနှင့်စည်းမျဉ်းစီမံခန့်ခွဲမှုများကိုပိုမိုကောင်းမွန်စေရန်ကူညီရန်ပိုမိုကောင်းမွန်သောထိန်းချုပ်မှုထိန်းချုပ်မှုကိုရရှိနိုင်ပါသည်။

ဖွံ့ဖြိုးတိုးတက်မှုဆိုင်ရာသို့မဟုတ်ထုတ်လုပ်မှုပတ် 0 န်းကျင်များတွင် SPL_AUTOLOAD_UNRegister ၏ဆင်ခြင်တုံတရားအသုံးပြုခြင်းသည်သင်၏အလိုအလျောက်တင်ဆောင်ယန္တရားပိုမိုထိရောက်စွာပြောင်းလွယ်ပြင်လွယ်ရှိစေရန်သေချာစေနိုင်သည်။