လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP တွင် IS_A () function ကိုမည်သို့အသုံးပြုရမည်နည်း။ အရာဝတ်ထုတစ်ခုသည်အချို့သောလူတန်းစားသို့မဟုတ် subclass ၏ဥပမာတစ်ခုရှိမရှိဆုံးဖြတ်ရန်

PHP တွင် IS_A () function ကိုမည်သို့အသုံးပြုရမည်နည်း။ အရာဝတ်ထုတစ်ခုသည်အချို့သောလူတန်းစားသို့မဟုတ် subclass ၏ဥပမာတစ်ခုရှိမရှိဆုံးဖြတ်ရန်

M66 2025-06-23

1 ။ IS_A () function ကို၏အခြေခံ syntax

 bool is_a(object|string $object_or_class, string $class, bool $allow_string = false)
  • $ Object_or_Class : check လုပ်ထားတဲ့အ ရာ ဝတ်ထု (သို့) အတန်းအစားနာမည်ကိုစစ်ဆေးပါ။

  • $ အတန်း - နှိုင်းယှဉ်ခံရဖို့ပစ်မှတ်အတန်းအစားအမည်။

  • $ Allow_String - ဝင်လာသော class name string ကိုပထမ ဦး ဆုံး parameter အဖြစ်သတ်မှတ်ရန်ဖြစ်စေခွင့်ပြုသည် (PHP 5.9+ မှသာထောက်ပံ့သည်) ။

function သည် boolean value ကိုပြန်ပို့သည် - $ Object_or_or_Class သည် ဒေါ်လာလူတန်းစား လူတန်းစားသို့မဟုတ်ယင်း၏ subclass ၏ဥပမာ အား ဖြင့်ဖြစ်သည်။ မဟုတ်ရင် မှားယွင်းတဲ့


2 ။ အခြေခံဥပမာ

 class Animal {}
class Dog extends Animal {}

$dog = new Dog();

if (is_a($dog, 'Animal')) {
    echo "ဟုတ်ကဲ့ Animal တစ် ဦး အတန်းအစားသို့မဟုတ်၎င်း၏ subclass ၏ဥပမာတစ်ခု";
} else {
    echo "不ဟုတ်ကဲ့ Animal တစ် ဦး အတန်းအစားသို့မဟုတ်၎င်း၏ subclass ၏ဥပမာတစ်ခု";
}

ထုတ်လုပ်မှု -

 ဟုတ်ကဲ့ Animal တစ် ဦး အတန်းအစားသို့မဟုတ်၎င်း၏ subclass ၏ဥပမာတစ်ခု

ဒီဥပမာမှာ ဒေါ်လာခွေး ဟာ ခွေးတစ်ကောင် ရဲ့ဥပမာတစ်ခုဖြစ်ပေမယ့် ခွေးက တိရစ္ဆာန်ကို အမွေဆက်ခံနေလို့ ပဲ


3 ။ ကြိုးများကိုအတန်းအစားအမည်များအဖြစ်တရားစီရင်ရန်ခွင့်ပြုပါ

တခါတရံတွင်ကျွန်ုပ်တို့သည်ဥပမာအရာဝတ္ထုများအစားအတန်းအစားအမည်ကြိုးများသာရှိနိုင်သည်။ တတိယ parameter $ ခွင့်ပြုချက်ကို ချိန်ညှိခြင်းအားဖြင့်အတန်းများအကြားအမွေဆက်ဆက်ဆက်ဆံရေးကိုသင်ဆုံးဖြတ်နိုင်သည်။

 class Animal {}
class Cat extends Animal {}

$className = 'Cat';

if (is_a($className, 'Animal', true)) {
    echo "$className ဟုတ်ကဲ့ Animal subclass သို့မဟုတ်သူ့ဟာသူ";
}

ရောင်ပြန်ဟပ်မှုသို့မဟုတ်မှီခိုမှုထိုးခြင်းကဲ့သို့သောပြောင်းလဲနေသောအတန်းအစားအမည်များနှင့်ဆက်ဆံရာတွင်၎င်းသည်အလွန်အသုံးဝင်သည်။


4 ။ အမှန်တကယ်ဖွံ့ဖြိုးရေးအခြေအနေဥပမာ

ကျွန်ုပ်တို့သည်အကြောင်းအရာစီမံခန့်ခွဲမှုစနစ်တွင်ပရိုဆက်ဆာအတန်းများ၌ပရို ဆက် ဆာအတန်းများစွာရှိသည်ဆိုပါစို့။ လက်ရှိ loaded processor class သည်အပြေးမတက်မီလိုက်နာမှုရှိမရှိအတည်ပြုလိုသည်။

 abstract class BaseProcessor {
    abstract public function process();
}

class MarkdownProcessor extends BaseProcessor {
    public function process() {
        // ကိုင်တွယ်ဖြေရှင်းသည် Markdown ကေြနပ်သော
    }
}

function runProcessor($processor) {
    if (!is_a($processor, 'BaseProcessor')) {
        throw new Exception("无效ကိုင်တွယ်ဖြေရှင်းသည်器!");
    }

    $processor->process();
}

$proc = new MarkdownProcessor();
runProcessor($proc);

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


5 ။ Instanceof နှင့်နှိုင်းယှဉ်ပါ

PHP တွင် အော် ပရေတာအင်ဂျင်နီယာလည်းရှိသည်။ ၎င်းသည်အလားတူတရားစီရင်ရာများကိုလည်းအသုံးပြုနိုင်သည်။ ဒီတော့ is_a () နှင့် Instanceof တို့အကြားခြားနားချက်ကဘာလဲ။

နိှုင်းယှသ် is_a () instanceof
ပုံနှိပ်စာ လုပ်ဆောင်ချက် တယ်လီဖုန်းဆက်သွယ်ပေးသူအမျိုးသမီး
strings ခွင့်ပြုပါ ဟုတ်ကဲ့ (တတိယ parameter သည်စစ်မှန်တဲ့ဖြစ်ရန်လိုအပ်သည်) မဟုတ်
ဖတ်ခြင်း ပိုကောင်း (ပိုမိုယုတ္တိဗေဒ) ပိုမိုအသုံးပြုသော Concise Grammar
ဗားရှင်းအထောက်အပံ့ PHP 4+, PHP 5.9+ string ကိုတရားစီရင်ခြင်းကိုထောက်ခံသည် PHP 5+

အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်အရာဝတ်ထုဥပမာတစ်ခု တရားစီရင်ခြင်း ဖြစ်လျှင်, နှင့် class name string ကိုဆုံးဖြတ်ရန်လိုအပ်သည့်ကိစ္စရပ်များအတွက် is_a () သည်ပိုမိုသင့်လျော်သည်။


6 ။ မှတ်စုဖို့အရာ

  1. စွမ်းဆောင်ရည်ပြ issues နာများ - is_a () သည်အောက်ခြေတွင်ရောင်ပြန်ဟပ်မှုလှုပ်ရှားခြင်းဖြစ်သည့်အောက်ခြေတွင်ရောင်ပြန်ဟပ် မှု တစ်ခုဖြစ်ပြီး၎င်းသည်အနည်းငယ်သောကြိမ်နှုန်းခေါ်ဆိုမှုများ၌ထည့်သွင်းစဉ်းစားရန်မလိုအပ်လျှင်ကွာဟချက်သည်အလွန်နည်းပါးသည်။

  2. အတန်းများတည်ရှိသည်ဖြစ်စေ - is_a () မသုံးမီပစ်မှတ်သင်တန်းကိုသေချာအောင်လုပ်ပါ, မဟုတ်ရင်အမှားတစ်ခုပေါ်ပေါက်လာနိုင်သည်။ သငျသညျပဉ္စမတရားသဖြင့်စီရင်ဆုံးဖြတ်ရန် class_exists () ကို သုံးနိုင်သည်။

  3. PSR သတ်မှတ်ချက်နှင့်ဒီဇိုင်းစိတ်ကူးများ - is_a () ကိုဆင်ခြင်တုံတရားအသုံးပြုခြင်းသည်လုံခြုံစိတ်ချရသောလုံခြုံမှုကိုမြှင့်တင်ပေးနိုင်သည်။ သို့သော်အလွန်အမင်းမှီခိုမှုသည်ပွင့်လင်းမှုနှင့်ပိတ်သိမ်းခြင်းနိယာမကိုလည်းချိုးဖောက်နိုင်သည်။ ၎င်းကို interface ဖြင့်အသုံးပြုရန်အကြံပြုသည်။