လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> spl_autoload_register နှင့်ပေါင်းစပ်။ ဦး စားပေးမှတဆင့် autoloaders မျိုးစုံကိုစီမံခန့်ခွဲ

spl_autoload_register နှင့်ပေါင်းစပ်။ ဦး စားပေးမှတဆင့် autoloaders မျိုးစုံကိုစီမံခန့်ခွဲ

gitbox 2025-05-28

1 ။ SPL_Autoload_Register သို့အခြေခံနိဒါန်း

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 ကိုခေါ်ဆိုသည်။


2 ။ အလိုအလျောက် loader ၏ ဦး စားပေးမှု၏စိန်ခေါ်မှု

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

သို့သော်ပရိုဂရမ်တွင်အလိုအလျောက် loader မှတ်ပုံတင်ခြင်းသည်ကွဲပြားသော module များနှင့်ကွဲပြားသောအချိန်မှတ်များ၌ကွဲပြားခြင်းနှင့်မှတ်ပုံတင်ရန်အမိန့်ကိုအာမခံချက်မရနိုင်ပါ။


3 ။ Prevend parameters တွေကိုမှတဆင့် ဦး စားပေးထိန်းချုပ်မှုအောင်မြင်သည်

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

4 ။ ဆောက်လုပ်ရေး ဦး စားပေးစီမံခန့်ခွဲမှုအလိုအလျောက် Loader Packaging Scheme

အကယ်. 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 န်ဆောင်မှုပေးသူများ၏စည်းလုံးမှုစီမံခန့်ခွဲမှုရရှိရန် ဦး စားပေးမှုများပိုမိုများပြားလာနိုင်သည်။


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

  • 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- ဂိတ်