PSR-4 အလိုအလျောက်စံချိန်စံညွှန်းများအပြီးတွင် Modern PHP စီမံကိန်းများအနေဖြင့် PSR-4 အလိုအလျှောက်စံချိန်စံညွှန်းများအပြီးတွင်အလေ့အကျင့်တစ်ခုဖြစ်လာသည်။ ၎င်းသည်အတန်းဖိုင်များတင်ခြင်းကိုရိုးရှင်းရုံသာမက Code ၏ဖွဲ့စည်းပုံကိုထိန်းသိမ်းခြင်းကိုလည်းပိုမိုကောင်းမွန်စေသည်။ သို့သော်တစ်ခါတစ်ရံတွင် Code တွင်အတန်းထဲတွင်အတန်းထဲတွင်ရှိကြောင်း, စာသင်ခန်းနှင့်၎င်း၏အမွေဆက်ဆက်တည်ရှိမှုကိုလျောက်ပတ်စွာတရားစီရင်ရန် PSR-4 အလိုအလျောက်တင်ခြင်းနှင့် is_a () function ကိုမည်သို့ပေါင်းစပ်ရမည်ကိုဤဆောင်းပါးသည်လေ့လာပါမည်။
PSR-4 ကို PHP-BANG မှအဆိုပြုထားသည်။ ၎င်းသည် Namespace နှင့်ဖိုင်လမ်းကြောင်းများအကြားမြေပုံပြောဆိုမှုကိုအသေးစိတ်ဖော်ပြထားသည်။ အထွေထွေစည်းမျဉ်းစည်းကမ်းတွေမှာ -
အဆိုပါ namespace တစ် ဦး အားဖြင့် folder လမ်းကြောင်းတစ်ခုနှင့်ကိုက်ညီ
Class Name သည် classname.php , ဖိုင်အမည်နှင့်ကိုက်ညီသည်
အလိုအလျောက် loader သည်ဖိုင်များကို namespace အရသိရသည်ရှာဖွေသည်
ဥပမာအားဖြင့် Namespace app \ controller များသည် Path SRC / Controllers နှင့်ကိုက်ညီပြီး USERCRORYLER အတန်းကို SRC / Controllers / Usercontroller.php တွင်တည်ရှိသင့်သည်။
is_a () function သည်အရာဝတ်ထုတစ်ခုသို့မဟုတ်အတန်းတစ်ခုသည်အချို့သောအတန်းတစ်ခုသို့မဟုတ် subclass ၏ဥပမာတစ်ခုရှိမရှိဆုံးဖြတ်နိုင်သည်။ ပုံမှန်အသုံးပြုမှုမှာ -
is_a($objectOrClassName, $className, true);
၎င်းတို့အနက်တတိယအချက်မှာ $ OfficeClassname ဆိုသည်မှာ $ Organclassname သည်အရာဝတ်ထုမဟုတ်ဘဲအတန်းအစားအမည် string မဟုတ်ကြောင်းညွှန်ပြရန် မှန်ကန်ကြောင်း အတည်ပြုရန်ဖြစ်သည်။
PSR-4 ကိုအလိုအလျောက်ဖွင့်ရန်အသုံးပြုသောအခါကျွန်ုပ်တို့သည်အတန်းဖိုင်ကိုကြိုတင်မဲ ရန် မလိုအပ်ပါ။ namespace နှင့် class name များမှန်ကန်သရွေ့အလိုအလျောက် loader သည်သက်ဆိုင်ရာဖိုင်ကိုတင်ရန်ကူညီလိမ့်မည်။ ထို့ကြောင့်ကျွန်ုပ်တို့သည် is_a () ကို တိုက်ရိုက် အသုံးပြု. အတန်းတစ်ခုရှိ,
ကျွန်ုပ်တို့တွင် interface app appres များ \ trames \ runnable နှင့် interface ကိုအကောင်အထည်ဖော်သည့်အတန်းအချို့ရှိသည်ဆိုပါစို့။ ယခု dynamically generated class တည်ရှိမှုနှင့် interface ကိုအကောင်အထည်ဖော်မရှိမရှိဆုံးဖြတ်ရန်လိုအပ်သည်။
<?php
namespace App\Contracts;
interface Runnable
{
public function run();
}
ထို့နောက်ကျွန်ုပ်တို့အတည်ပြုရန် IS_A () ကို အသုံးပြုသည်။
<?php
$className = 'App\\Services\\MyService';
if (class_exists($className) && is_a($className, 'App\\Contracts\\Runnable', true)) {
echo "$className တည်ရှိခြင်းနှင့်အကောင်အထည်ဖော် Runnable ထိသိျက်နှာ";
} else {
echo "$className မပစ္စုပ္ပန်သို့မဟုတ်အကောင်အထည်ဖော်မရ Runnable ထိသိျက်နှာ";
}
ဒီမှာသော့ချက်အချက်များ:
Class_exists ($ classname) သည် PSR-4 အလိုအလျောက် loader ကို class file ကိုဖွင့်ရန်ကြိုးစားသည်
is_a ($ classname) appeds \\ စာချုပ် \\ classname သည် $ classname imprinable interface ကိုအကောင်အထည်ဖော်နိုင်မလားဆိုသည်ကိုအတည်ပြုပါ
namespace တိကျသော : $ classname သည်အပြည့်အဝ namespace လမ်းကြောင်းကိုသေချာအောင်လုပ်ပါ။
အလိုအလျောက်တင်ခြင်းကိုဖွင့်ပါ ။ PSR-4 စည်းမျဉ်းစည်းကမ်းများကိုလိုက်နာရန်အလိုအလျောက် Loader များသည် Composer ၏ autoload configurations မှတဆင့်မှတ်ပုံတင်ရမည်။
Class_exists အပြင်ဘက်ရှိတိုက်ရိုက်ကိုးကားချက်များကိုရှောင်ကြဉ်ပါ ။ အတန်းမတင်မီတိုက်ရိုက်မပို့ပါနှင့်။
composer.json တွင် configure:
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
command ကို run
composer dump-autoload
အလိုအလျောက်တင်ဆောင်ယန္တရားကိုဖွင့်နိုင်သည်။ ဤနည်းအားဖြင့် class_exists နှင့် is_a သည် သက်ဆိုင်ရာအတန်းအစားဖိုင်များကိုအလိုအလျောက်ဖွင့်လိမ့်မည်။
PSR-4 အလိုအလျောက်တင်ခြင်းနှင့် is_a () function ကိုပေါင်းစပ်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်အတန်းသည်၎င်း၏အမွေသို့မဟုတ်အကောင်အထည်ဖော်မှုကိုအတည်ပြုခြင်းရှိမရှိကြွေးခဲ။ ထိထိရောက်ရောက်ဆုံးဖြတ်နိုင်သည်။ ဤနည်းလမ်းသည်လက်ဖြင့်မိတ်ဆက်ပေးနေသည့်လက်ဖြင့်မိတ်ဆက်ပေးခြင်းကိုလက်ဖြင့်လုပ်ခြင်းကိုရှောင်ကြဉ်ရုံသာမကကုဒ်၏ပြောင်းလွယ်ပြင်လွယ်မှုနှင့်လုံခြုံမှုကိုလည်းပါစေသည်။ ၎င်းသည်ခေတ်သစ် PHP ဖွံ့ဖြိုးတိုးတက်မှုတွင်အကြံပြုထားသောအလေ့အကျင့်များထဲမှတစ်ခုဖြစ်သည်။
<?php
// နမူနာ:动态判断类是否存在且符合ထိသိျက်နှာ
$className = 'App\\Services\\MyService';
if (class_exists($className) && is_a($className, 'App\\Contracts\\Runnable', true)) {
echo "$className တည်ရှိခြင်းနှင့်အကောင်အထည်ဖော် Runnable ထိသိျက်နှာ";
} else {
echo "$className မပစ္စုပ္ပန်သို့မဟုတ်အကောင်အထည်ဖော်မရ Runnable ထိသိျက်နှာ";
}
အထက်ဖော်ပြပါကုဒ်နံပါတ်အတွက်ဥပမာ URL domain name:
$url = "https://m66.net/api/data";