spl_autoload_register သည် autoload လုပ်ဆောင်ချက်တစ်ခုသို့မဟုတ်တစ်ခုထက်ပိုသောမှတ်ပုံတင်ခြင်းကိုမှတ်ပုံတင်နိုင်သည်။ သင်ချထားသည့်အတန်းကိုသင်ချက်ချင်းပြုလုပ်သောအခါ PHP သည်မှတ်ပုံတင်ထားသော autoloader ကိုအတန်းသတ်မှတ်ချက်မပြည့်မီသည်အထိသို့မဟုတ် autooloaders အားလုံးကျရှုံးသည်အထိမှတ်ပုံတင်ထားသော autoloader ကိုအလှည့်ခေါ်ဆိုသည်။
spl_autoload_register('myAutoload1');
spl_autoload_register('myAutoload2');
function myAutoload1($class) {
// အတန်းကိုတင်ရန်ကြိုးစားပါ
}
function myAutoload2($class) {
// အတန်းကိုတင်ရန်ကြိုးစားပါ
}
PHP သည် Autoloader ကိုပုံမှန်အားဖြင့်မှတ်ပုံတင်ရန်အတွက် sequence ကိုခေါ်ဆိုသည်။
ပုံမှန်မှတ်ပုံတင်ရန်အမိန့်သည်ခေါ်ဆိုမှုအမိန့်ဖြစ်သည်။ သင် ဦး စားပေးကိုညှိလိုပါကမှတ်ပုံတင်ရန်အမိန့်မှတဆင့်သင်သာထိန်းချုပ်နိုင်သည်။ ပထမ ဦး ဆုံးစာရင်းဝင်ခေါ်ဆိုမှုနှင့်နောက်ပိုင်းတွင်စာရင်းယူသည့်နောက်ဆက်တွဲခေါ်ဆိုမှု။
သို့သော်ပရိုဂရမ်တွင်အလိုအလျောက် loader မှတ်ပုံတင်ခြင်းသည်ကွဲပြားသော module များနှင့်ကွဲပြားသောအချိန်မှတ်များ၌ကွဲပြားခြင်းနှင့်မှတ်ပုံတင်ရန်အမိန့်ကိုအာမခံချက်မရနိုင်ပါ။
PHP 5.3.0 သည် spl_autoload_register ၏တတိယ parameter ကိုထောက်ပံ့ပေး သည့်တတိယ parameter သည် PARM_AUTOLOADER ရက်စွဲကိုမိတ်ဆက်ပေးပြီး,
spl_autoload_register('highPriorityLoader', true, true); // အမြင့်ဆုံး ဦး စားပေး
spl_autoload_register('lowPriorityLoader', true, false); // ဦး စားပေး
ဤနေရာတွင် မြင့်မားသောမြင့်မားသော မြင့်မားသောအရှုံးကို အနိမ့်ဆုံးအနိမ့် ဆုံးတွင်ပထမဆုံးခေါ်လိမ့်မည်။
ဥပမာ -
function highPriorityLoader($class) {
echo "High priority loader trying to load $class\n";
// PseudoDode:logic loading
}
function lowPriorityLoader($class) {
echo "Low priority loader trying to load $class\n";
// PseudoDode:logic loading
}
spl_autoload_register('lowPriorityLoader');
spl_autoload_register('highPriorityLoader', true, true);
new SomeClass; // အလိုအလျောက်တင်ဆောင်ခြင်းကိုပထမ ဦး ဆုံးခေါ်လိမ့်မည် highPriorityLoader
အကယ်. autoloaders အများအပြားနှင့် ဦး စားပေးစနစ်သည်ရှုပ်ထွေးသောအရာဖြစ်သည်။ "autooloader manager" ကိုသင်ခန်းစာယူပြီးခေါ်ဆိုမှုအမိန့်ကိုတညီတညွတ်တည်းစီမံခန့်ခွဲရန်အလိုအလျောက် loader စာရင်းကိုထိန်းသိမ်းထားနိုင်သည်။
နမူနာကုဒ်:
class AutoloadManager {
protected static $loaders = [];
// autoloader မှတ်ပုံတင်ပါ,priority တန်ဖိုးပိုမိုမြင့်မြတ်သော, ဦး စားပေးအဆင့်မြင့်
public static function registerLoader(callable $loader, int $priority = 0) {
self::$loaders[] = ['loader' => $loader, 'priority' => $priority];
// ဦး စားပေးအားဖြင့် sort,မြင့်မားသော ဦး စားပေးအဆင့်သတ်မှတ်ချက်
usort(self::$loaders, function($a, $b) {
return $b['priority'] <=> $a['priority'];
});
self::refreshAutoloaders();
}
// Autoloaders အားလုံးကိုပြန်လည်မှတ်ပုံတင်ပါ SPL,ခေါ်ဆိုမှု၏အမိန့်ကိုသေချာ
protected static function refreshAutoloaders() {
// 先清除所有已autoloader မှတ်ပုံတင်ပါ(သာလက်ရှိမန်နေဂျာအဘို့)
foreach (spl_autoload_functions() as $func) {
if (is_array($func) && $func[0] === __CLASS__) {
spl_autoload_unregister($func);
}
}
// ဦး စားပေး autooloaders အားလုံးကိုမှတ်ပုံတင်ပါ
foreach (self::$loaders as $item) {
spl_autoload_register($item['loader']);
}
}
}
// နမူနာ autoloader
function loaderA($class) {
echo "Loader A trying $class\n";
}
function loaderB($class) {
echo "Loader B trying $class\n";
}
// မှတ်ပုံတင်သည့်အခါ ဦး စားပေးသတ်မှတ်ပါ
AutoloadManager::registerLoader('loaderA', 5);
AutoloadManager::registerLoader('loaderB', 10);
new TestClass;
ဤနည်းအားဖြင့် autoloadmanager မှတစ်ဆင့်ကျွန်ုပ်တို့သည်အလိုအလျောက် 0 န်ဆောင်မှုပေးသူများ၏စည်းလုံးမှုစီမံခန့်ခွဲမှုရရှိရန် ဦး စားပေးမှုများပိုမိုများပြားလာနိုင်သည်။
SPL_Autoload_register သည်မှတ်ပုံတင်ရန်အမိန့်တွင် Autooloaders မျိုးစုံဟုခေါ်သည်။
တတိယ parameter ကို ဒေါ်လာ သုံး . ရိုးရိုးရှင်းရှင်း ဦး စားပေးထိန်းချုပ်မှုကိုရရှိနိုင်ပါသည်။
ပိုမိုရှုပ်ထွေးသောမြင်ကွင်းများသည် encapsulation ပြုလုပ်ခြင်းမန်နေဂျာများကိုရှာဖွေခြင်း,
ဤအချက်သည် Multooloader ပတ်ဝန်းကျင်တွင် loading logic သည်ရှင်းလင်းပြီးပြောင်းလွယ်ပြင်လွယ်ရှိကြောင်းသေချာစေသည်။
အလိုအလျောက် 0 န်ဆောင်မှုပေးသူများ၏ ဦး စားပေးမှုကိုကျိုးကြောင်းဆီလျော်စွာစီမံခြင်းအားဖြင့်ကုဒ်ဖွဲ့စည်းပုံ၏ထိန်းသိမ်းနိုင်မှုနှင့်ပမာဏကိုထိရောက်စွာတိုးတက်အောင်လုပ်နိုင်သည်။ ၎င်းသည်အကြီးစားစီမံကိန်းများအတွက်အလိုအလျောက်တင်ထားသောဒီဇိုင်းအတွက်အဓိကကျွမ်းကျင်မှုဖြစ်သည်။
<?php
// ရိုးရှင်းသောဥပမာ,ဦး စားပေးထိန်းချုပ်မှု
function loaderLow($class) {
echo "Low priority loader: $class\n";
}
function loaderHigh($class) {
echo "High priority loader: $class\n";
}
spl_autoload_register('loaderLow');
spl_autoload_register('loaderHigh', true, true);
new SomeClass;
?>
PHP Automatic Loading Skills More အတွက် https://gitbox.net/php-autoload- ဂိတ်