လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PSR-4 အလိုအလျောက် 0 င်ရောက်ခြင်းစနစ်တွင် Class Verification ပြုလုပ်ရန် is_a () ကိုပေါင်းစပ်ပါ

PSR-4 အလိုအလျောက် 0 င်ရောက်ခြင်းစနစ်တွင် Class Verification ပြုလုပ်ရန် is_a () ကိုပေါင်းစပ်ပါ

M66 2025-05-31

PSR-4 အလိုအလျောက်စံချိန်စံညွှန်းများအပြီးတွင် Modern PHP စီမံကိန်းများအနေဖြင့် PSR-4 အလိုအလျှောက်စံချိန်စံညွှန်းများအပြီးတွင်အလေ့အကျင့်တစ်ခုဖြစ်လာသည်။ ၎င်းသည်အတန်းဖိုင်များတင်ခြင်းကိုရိုးရှင်းရုံသာမက Code ၏ဖွဲ့စည်းပုံကိုထိန်းသိမ်းခြင်းကိုလည်းပိုမိုကောင်းမွန်စေသည်။ သို့သော်တစ်ခါတစ်ရံတွင် Code တွင်အတန်းထဲတွင်အတန်းထဲတွင်ရှိကြောင်း, စာသင်ခန်းနှင့်၎င်း၏အမွေဆက်ဆက်တည်ရှိမှုကိုလျောက်ပတ်စွာတရားစီရင်ရန် PSR-4 အလိုအလျောက်တင်ခြင်းနှင့် is_a () function ကိုမည်သို့ပေါင်းစပ်ရမည်ကိုဤဆောင်းပါးသည်လေ့လာပါမည်။


PSR-4 အလိုအလျောက်တင်ရန်မိတ်ဆက်ခြင်း

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 ကိုအသုံးပြုပြီးအတန်းများကိုစစ်ဆေးရန်ကြော့ရှင်းသောနည်းလမ်း

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 အပြင်ဘက်ရှိတိုက်ရိုက်ကိုးကားချက်များကိုရှောင်ကြဉ်ပါ ။ အတန်းမတင်မီတိုက်ရိုက်မပို့ပါနှင့်။


PSR-4 အလိုအလျောက်တင်ရန်တေးရေးဆရာနှင့်ပေါင်းစပ်

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";