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
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
ပထမ ဦး ဆုံး 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 ၏ဆက်ဆံရေးကိုဆက်လက်အကောင်အထည်ဖော်ခြင်းအပေါ်မှီခိုနေရသောအခြေအနေများတွင်အလွန်အရေးကြီးသည်။
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 မပါရှိပါက၎င်းသည်တရားစီရင်ခြင်းပျက်ကွက်မှုကိုဖြစ်ပေါ်စေလိမ့်မည်။
အကယ်. 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();
}