Autoloading သည် PHP တွင်အရေးကြီးသောအင်္ဂါရပ်တစ်ခုဖြစ်သည်။ ၎င်းသည်အတန်းအစားဖိုင်များ အပါအ 0 င် လူတန်းစား မပါဘဲလူတန်းစားကိုခေါ်ဆိုသည့်အခါ၎င်းသည်သက်ဆိုင်ရာအတန်းဖိုင်များကိုအလိုအလျောက်မိတ်ဆက်ပေးရန်ခွင့်ပြုသည်။ အလိုအလျောက်တင်ခြင်းကိုရရှိရန်အတွက် __Autoload () function သို့မဟုတ် spl_autoload_register () method ကိုသုံးလေ့ရှိသည်။ ဤဆောင်းပါးသည် PHP အတန်းများကိုအလိုအလျောက် 0 န် ဆောင်မှုပေးခြင်းနှင့်ထုံးစံအတိုင်း autoloader မှတဆင့်မည်သို့အကောင်အထည်ဖော်ရမည်ကိုပြသမည်
အလိုအလျောက် 0 င်ရောက်ခြင်းလုပ်ဆောင်ချက်မရှိပါ။ ကျွန်ုပ်တို့သည်အတန်းတစ်ရပ်ကိုအသုံးပြုသောအခါတိုင်းအတန်းဖိုင်ကိုကိုယ်တိုင်မိတ်ဆက်ရန်လိုအပ်သည်။ ဥပမာအားဖြင့်:
require_once 'path/to/MyClass.php';
$obj = new MyClass();
ဤနည်းလမ်းသည်ဖြစ်နိုင်ခြေရှိသော်လည်းအလုံအလောက်ပြောင်းလွယ်ပြင်လွယ်မရှိပါ။ စီမံကိန်းများသည်ကြီးမားလာသောအခါဖိုင်မိတ်ဆက်မှုလက်ဖြင့်စီမံခန့်ခွဲမှုသည်အလွန်ခက်ခဲသော, အမှားအယွင်းများဖြစ်ပေါ်နိုင်သည်။ အလိုအလျောက်တင်ခြင်းသည်ဤပြ problem နာကိုဖြေရှင်းနိုင်သည်။ သင် instantiate fatch သောအခါ PHP သည်အတန်း၏အဓိပ္ပါယ်ဖိုင်ကိုအလိုအလျောက်ဖွင့်လိမ့်မည်။
PHP တွင် autooloading ၏အသုံးအများဆုံးနည်းလမ်းမှာ SPL_Autoload_register မှတဆင့်ထုံးစံ autoloader function ကိုမှတ်ပုံတင်ရန်ဖြစ်သည်။ သင်မတင်ထားသည့်အတန်းတစ်ခုကိုသင်ဝင်ရောက်ကြည့်ရှုသောအခါဤလုပ်ဆောင်ချက်ကိုအလိုအလျောက်ဟုခေါ်လိမ့်မည်။
ကျွန်ုပ်တို့၏ဥပမာတွင် autoloader ကိုစတင်ရန် init function ကိုအသုံးပြုသည်။ ဒီ Init function ကိုကျွန်တော်တို့ရဲ့ autoloader ကိုမှတ်ပုံတင်။
// autoloader.php စာချုပ်စာတမ်း
function init() {
spl_autoload_register(function ($class_name) {
// 定义类စာချုပ်စာတမ်း的路径,ယူဆချက်类စာချုပ်စာတမ်း保存在 "classes" စာချုပ်စာတမ်း夹下
$file = __DIR__ . '/classes/' . $class_name . '.php';
// 检查စာချုပ်စာတမ်း是否存在并加载
if (file_exists($file)) {
require_once $file;
} else {
throw new Exception("Class {$class_name} not found.");
}
});
}
ဤဥပမာတွင် Init function သည် spl_autoload_register မှတဆင့် autoloader () အဖြစ်အမည်မသိ function ကိုမှတ်ပုံတင်သည်။ PHP သည် Class ကိုဖွင့်ရန်လိုအပ်သည့်အခါတိုင်း SPL_Autoload_register () သည် ဤအမည်မသိ function ကိုအလိုအလျောက်ခေါ်ဆိုလိမ့်မည်။
ပရိုဂရမ်၏ startup လုပ်ငန်းစဉ်အတွင်း axtoleader ကိုမှတ်ပုံတင်ရန် Init function ကိုခေါ်ရန်လိုအပ်သည်။ များသောအားဖြင့်သင်သည် (ဥပမာ index.php ကဲ့သို့သော entry file တစ်ခုတွင်ခေါ်ဆိုမှုများကိုပြုလုပ်လိမ့်မည်။
// index.php စာချုပ်စာတမ်း
require_once 'autoloader.php';
// အလိုအလျောက် loading function ကိုစတင်
init();
// ဘယ်အချိန်မှာအတန်းကိုအသုံးပြုတဲ့အခါ,不需要手动引入စာချုပ်စာတမ်း
$obj = new MyClass(); // ယူဆချက် MyClass အတန်းထဲတွင်တည်ရှိသည် "classes/MyClass.php"
ဤနည်းအားဖြင့် MyClass Instantiate လုပ်သည့်အခါ PHP သည် spl_autoload_register ကိုအလိုအလျောက်ခေါ်ဆိုလိမ့်မည် ။
Class Name ပ conflicts ိပက်ခများနှင့်ပိုမိုကောင်းမွန်သောစုစည်းမှုကိုရှောင်ရှားရန်ကျွန်ုပ်တို့သည်များသောအားဖြင့်အုပ်စုလိုက်အတန်းများသို့အမည်များကိုအသုံးပြုလေ့ရှိသည်။ အမည်များကိုအသုံးပြုသောအခါ, ကျွန်ုပ်တို့သည်အလိုအလျောက် 0 န်ဆောင်မှုပေးရန်အတွက်အလိုအလျောက်တင်ရန်အတွက် Autoloader ကိုချိန်ညှိနိုင်သည်။
ကျွန်ုပ်တို့တွင်အောက်ပါဖွဲ့စည်းပုံရှိသည်ဆိုပါစို့။
/classes
/App
/Controller
UserController.php
ထို့နောက် Usercontroller.php ဖိုင်ရှိကုဒ်သည်အောက်ပါအတိုင်းဖြစ်သည် -
// classes/App/Controller/UserController.php
namespace App\Controller;
class UserController {
public function __construct() {
echo "UserController class is loaded.";
}
}
စာသင်စုနယ်ဖုများဖြင့်အတန်းဖိုင်များတင်ခြင်းကိုအထောက်အကူပြုရန်ကျွန်ုပ်တို့သည် Init function ကိုပြင်ဆင်ရန်လိုအပ်သည်။
// autoloader.php စာချုပ်စာတမ်း
function init() {
spl_autoload_register(function ($class_name) {
// 将命名空间转化为စာချုပ်စာတမ်း路径
$class_name = str_replace('\\', '/', $class_name);
// 定义类စာချုပ်စာတမ်း的路径
$file = __DIR__ . '/classes/' . $class_name . '.php';
// 检查စာချုပ်စာတမ်း是否存在并加载
if (file_exists($file)) {
require_once $file;
} else {
throw new Exception("Class {$class_name} not found.");
}
});
}
File Path (Classes / app / controller / usercontroller.php) သည် Namespace (Apps \ ControllerControllertroller) ကိုအစားထိုးရန် str_replace (app) ကို အစားထိုးရန်။
ကျွန်ုပ်တို့သည်အမည်များကိုအသုံးပြုသောအခါကျွန်ုပ်တို့သည်အချို့သောဖိုင်တည်ဆောက်မှုစည်းဝေးကြီးများကိုလိုက်နာလေ့ရှိသည်။ ဥပမာအားဖြင့်, namespace တစ်ခုစီသည်ဖိုင်တွဲတစ်ခုနှင့်ကိုက်ညီပြီးအတန်းအစားအမည်သည်ဖိုင်အမည်နှင့်အတူတူဖြစ်သည်။ ဤစည်းဝေးကြီးက autoloader မှန်ကန်သောဖိုင်ကိုရှာရန်ကူညီသည်။
ဥပမာအားဖြင့်ကျွန်ုပ်တို့တွင်အတန်း အက်ပလီကေးရှင်း, \ controller \ usercontroller နှင့်၎င်း၏သက်ဆိုင်ရာဖိုင်လမ်းကြောင်းသည် အတန်း / အက်ပလီကေးရှင်း / controller / usercontroller / usercontroller / usercontroller / usercontroller / usercontroller / usercontroller / usercontroller / usercontroller / usercontroller / usercontroller / usercontroller.php ။ ဤစည်းဝေးကြီးကိုကျွန်ုပ်တို့လိုက်နာပါကကျွန်ုပ်တို့၏ autoloader သည်အတန်းအမည်များနှင့်အမည်များပေါ်တွင် အခြေခံ. ဖိုင်များကိုအဆင်ပြေစွာရှာဖွေနိုင်သည်။
Init function နှင့် spl_autoload_register မှအကောင်အထည်ဖော်သည့်အလိုအလျောက်အတန်းအစားတင်ထားသောလုပ်ဆောင်ချက်သည် PHP စီမံကိန်းများ၏ကုဒ်စီမံခန့်ခွဲမှုဆိုင်ရာစီမံခန့်ခွဲမှုများကိုလွယ်ကူစွာရိုးရှင်းစေပြီးဖိုင်တွဲများကိုပြ trouble နာများကိုလျှော့ချနိုင်သည်။ namespace များအသုံးပြုခြင်းနှင့်အတူပေါင်းစပ်ခြင်းနှင့်အတူအလိုအလျောက် loading function သည်ပိုမိုရှင်းလင်းသောနှင့်ပိုမိုဖွဲ့စည်းထားသောကျင့်ထုံးအဖွဲ့ကိုထောက်ပံ့နိုင်သည်။
အလိုအလျောက်တင်ခြင်းသည်ဖွံ့ဖြိုးတိုးတက်မှုထိရောက်မှုကိုတိုးတက်စေသည်သာမကစီမံကိန်းဖွဲ့စည်းပုံကိုပိုမိုရှင်းလင်းစွာပြုလုပ်နိုင်သည်။ ဤနည်းအားဖြင့်ကျွန်ုပ်တို့သည် code ကိုကြီးမားသောစီမံကိန်းများတွင်သပ်သပ်ရပ်ရပ်နှင့်ထိထိရောက်ရောက်အသုံးချနိုင်ပါသည်။