လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> is_a () ကို အသုံးပြု. တက်ကြွသောအတန်းအစားအမည်များကိုစီရင်သောအခါအဘယ်အန္တရာယ်များကိုအာရုံစိုက်သင့်သနည်း။

is_a () ကို အသုံးပြု. တက်ကြွသောအတန်းအစားအမည်များကိုစီရင်သောအခါအဘယ်အန္တရာယ်များကိုအာရုံစိုက်သင့်သနည်း။

M66 2025-06-15

1 ။ is_a ၏အခြေခံအသုံးပြုမှုကိုပြန်လည်သုံးသပ်ခြင်း ()

is_a () သည်အရာဝတ်ထုတစ်ခုသည်အတန်းတစ်ခု၏ဥပမာတစ်ခုသို့မဟုတ်၎င်းကိုထိုအတန်းမှအမွေဆက်ခံနေသည်ကိုဆုံးဖြတ်ရန်အသုံးပြုသည်။ function ကိုလက်မှတ်သည်အောက်ပါအတိုင်းဖြစ်သည် -

 is_a(object $object, string $class_name, bool $allow_string = false): bool
  • $ object : ရှာဖွေတွေ့ရှိရန်အရာဝတ်ထု ( $ Allow_string ပေါ် မူတည်. အတန်းအစားအမည်) ။

  • $ class_name : ပစ်မှတ်အတန်းအစားအမည် string ကို။

  • $ Allow_String : ပထမ ဦး ဆုံး parameter ကိုအရာဝတ်ထုတစ်ခုအစားအတန်းအစားအမည် string ကိုတစ် ဦး ကခွင့်ပြုရန်ဖြစ်စေခွင့်ပြု ထား,

ဥပမာအားဖြင့်:

 class Animal {}
class Dog extends Animal {}

$dog = new Dog();
var_dump(is_a($dog, 'Animal')); // true
var_dump(is_a($dog, 'Dog'));    // true

2 ။ PIT POINT 1: Dynamic Class Names ၏စာလုံးအကန့်အသတ်မရှိပြ issues နာများ

PHP အတန်းအစားအမည်များသည်စာလုံးအကြီးအသေး အရေးမကြီး သော်လည်း,

ဥပမာ -

 $className = 'dog'; // အသေး
var_dump(is_a($dog, $className)); // false

ခွေး နှင့် ခွေးသည် တူညီသောအတန်းအစား ကို ကိုယ်စားပြုသော်လည်း ,

ဖြေရှင်းချက် -

အောင်မြင်သောအတန်းအစားအမည်များသည်မှန်ကန်သောအမှု၌ရှိကြောင်းသေချာစေပါ။ သင်ပထမ ဦး ဆုံးအတည်ပြုရန် Get_Class () သို့မဟုတ် class_exists () ကို သုံးနိုင်သည်။

 $className = 'dog';
if (class_exists(ucfirst($className))) {
    $className = ucfirst($className);
}
var_dump(is_a($dog, $className)); // true

3 ။ PIT POINT 2: တက်ကြွသောအတန်းအစားအမည်ကို string တစ်ခုအဖြစ်အသုံးပြုသောအခါတတိယ parameter သည်သတ်မှတ်ထားရမည်။

ပထမ ဦး ဆုံး parameter သည်အတန်းအစားအမည် string တစ်ခုဖြစ်သောအခါ default is_a () is_a () () () () သည် တရားစီရင်ခြင်းမဟုတ်ဘဲ မှားယွင်းသောပြန်လာလိမ့်မည်မဟုတ်သော်လည်းမှားယွင်းသော ပြန်လာလိမ့်မည်မဟုတ်ပေ။

 var_dump(is_a('Dog', 'Animal')); // false

Class Name String ကို အခြေခံ. စီရင်ဆုံးဖြတ်ရန်အတွက်သင်သည်တတိယ parameter သည် အမှန်ပင် လျှောက်ရန်လိုအပ်သည်။

 var_dump(is_a('Dog', 'Animal', true)); // true

ဤအချက်သည်အချို့သောအခြေအနေများတွင် strings strings ၏ဆက်ဆံရေးကိုဆက်လက်အကောင်အထည်ဖော်ခြင်းအပေါ်မှီခိုနေရသောအခြေအနေများတွင်အလွန်အရေးကြီးသည်။

4 ။ PIT POINT 3: NAMESPARE အတန်းအစားအမည်များကိုအသုံးပြုခြင်း

Dynamic Class အမည်များတွင်မကြာခဏအမည်များပါ 0 င်ပြီး Namespace Class Name ကိုအသုံးပြုရမည်။

 namespace m66\Animals;

class Dog {}

$dog = new Dog();
var_dump(is_a($dog, 'm66\Animals\Dog')); // true

အကယ်. Vermentically Passed Class Name တွင် namespace မပါရှိပါက၎င်းသည်တရားစီရင်ခြင်းပျက်ကွက်မှုကိုဖြစ်ပေါ်စေလိမ့်မည်။

5 ။ Pit Point 4: အတန်းအစားမတင်သည့်အခါတရားစီရင်ခြင်းအမှား

အကယ်. dynamically passed class name ကိုမဖွင့်သေးပါက is_a () သည် မှားယွင်းသော ပြန်လာလိမ့်မည်။ သက်ဆိုင်ရာသင်တန်းများကို autoloader မှတဆင့်ထည့်သွင်းထားကြောင်းသေချာပါစေ။

 <?php

namespace m66\net;

class Animal {}
class Dog extends Animal {}

function checkInstance($obj, $dynamicClassName)
{
    // ပုံမှန် dynamic အတန်းအစားအမည်များ
    $dynamicClassName = trim($dynamicClassName);
    if (!class_exists($dynamicClassName)) {
        // အလိုအလျောက်တင်ဆောင်ယန္တရားယူဆ,ဒီမှာအမှားတစ်ခုပစ်ရန်ရိုးရှင်းပါသည်
        throw new \Exception("Class $dynamicClassName မတည်ရှိပါဘူး");
    }
    return is_a($obj, $dynamicClassName);
}

$dog = new Dog();

try {
    $result = checkInstance($dog, 'm66\net\Animal');
    echo $result ? 'ဟုတ်ကဲ့ Animal သို့မဟုတ်၎င်း၏ subclass' : '不ဟုတ်ကဲ့ Animal အမျိုးအစား';
} catch (\Exception $e) {
    echo $e->getMessage();
}