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 ၏ဥပမာ အား ဖြင့်ဖြစ်သည်။ မဟုတ်ရင် မှားယွင်းတဲ့ ။
class Animal {}
class Dog extends Animal {}
$dog = new Dog();
if (is_a($dog, 'Animal')) {
echo "ဟုတ်ကဲ့ Animal တစ် ဦး အတန်းအစားသို့မဟုတ်၎င်း၏ subclass ၏ဥပမာတစ်ခု";
} else {
echo "不ဟုတ်ကဲ့ Animal တစ် ဦး အတန်းအစားသို့မဟုတ်၎င်း၏ subclass ၏ဥပမာတစ်ခု";
}
ထုတ်လုပ်မှု -
ဟုတ်ကဲ့ Animal တစ် ဦး အတန်းအစားသို့မဟုတ်၎င်း၏ subclass ၏ဥပမာတစ်ခု
ဒီဥပမာမှာ ဒေါ်လာခွေး ဟာ ခွေးတစ်ကောင် ရဲ့ဥပမာတစ်ခုဖြစ်ပေမယ့် ခွေးက တိရစ္ဆာန်ကို အမွေဆက်ခံနေလို့ ပဲ ။
တခါတရံတွင်ကျွန်ုပ်တို့သည်ဥပမာအရာဝတ္ထုများအစားအတန်းအစားအမည်ကြိုးများသာရှိနိုင်သည်။ တတိယ parameter $ ခွင့်ပြုချက်ကို ချိန်ညှိခြင်းအားဖြင့်အတန်းများအကြားအမွေဆက်ဆက်ဆက်ဆံရေးကိုသင်ဆုံးဖြတ်နိုင်သည်။
class Animal {}
class Cat extends Animal {}
$className = 'Cat';
if (is_a($className, 'Animal', true)) {
echo "$className ဟုတ်ကဲ့ Animal subclass သို့မဟုတ်သူ့ဟာသူ";
}
ရောင်ပြန်ဟပ်မှုသို့မဟုတ်မှီခိုမှုထိုးခြင်းကဲ့သို့သောပြောင်းလဲနေသောအတန်းအစားအမည်များနှင့်ဆက်ဆံရာတွင်၎င်းသည်အလွန်အသုံးဝင်သည်။
ကျွန်ုပ်တို့သည်အကြောင်းအရာစီမံခန့်ခွဲမှုစနစ်တွင်ပရိုဆက်ဆာအတန်းများ၌ပရို ဆက် ဆာအတန်းများစွာရှိသည်ဆိုပါစို့။ လက်ရှိ 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 အမှားများကိုရှောင်ရှားရန်ချွင်းချက်ချလိမ့်မည်။
PHP တွင် အော် ပရေတာအင်ဂျင်နီယာလည်းရှိသည်။ ၎င်းသည်အလားတူတရားစီရင်ရာများကိုလည်းအသုံးပြုနိုင်သည်။ ဒီတော့ is_a () နှင့် Instanceof တို့အကြားခြားနားချက်ကဘာလဲ။
နိှုင်းယှသ် | is_a () | instanceof |
---|---|---|
ပုံနှိပ်စာ | လုပ်ဆောင်ချက် | တယ်လီဖုန်းဆက်သွယ်ပေးသူအမျိုးသမီး |
strings ခွင့်ပြုပါ | ဟုတ်ကဲ့ (တတိယ parameter သည်စစ်မှန်တဲ့ဖြစ်ရန်လိုအပ်သည်) | မဟုတ် |
ဖတ်ခြင်း | ပိုကောင်း (ပိုမိုယုတ္တိဗေဒ) | ပိုမိုအသုံးပြုသော Concise Grammar |
ဗားရှင်းအထောက်အပံ့ | PHP 4+, PHP 5.9+ string ကိုတရားစီရင်ခြင်းကိုထောက်ခံသည် | PHP 5+ |
အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်အရာဝတ်ထုဥပမာတစ်ခု တရားစီရင်ခြင်း ဖြစ်လျှင်, နှင့် class name string ကိုဆုံးဖြတ်ရန်လိုအပ်သည့်ကိစ္စရပ်များအတွက် is_a () သည်ပိုမိုသင့်လျော်သည်။
စွမ်းဆောင်ရည်ပြ issues နာများ - is_a () သည်အောက်ခြေတွင်ရောင်ပြန်ဟပ်မှုလှုပ်ရှားခြင်းဖြစ်သည့်အောက်ခြေတွင်ရောင်ပြန်ဟပ် မှု တစ်ခုဖြစ်ပြီး၎င်းသည်အနည်းငယ်သောကြိမ်နှုန်းခေါ်ဆိုမှုများ၌ထည့်သွင်းစဉ်းစားရန်မလိုအပ်လျှင်ကွာဟချက်သည်အလွန်နည်းပါးသည်။
အတန်းများတည်ရှိသည်ဖြစ်စေ - is_a () မသုံးမီပစ်မှတ်သင်တန်းကိုသေချာအောင်လုပ်ပါ, မဟုတ်ရင်အမှားတစ်ခုပေါ်ပေါက်လာနိုင်သည်။ သငျသညျပဉ္စမတရားသဖြင့်စီရင်ဆုံးဖြတ်ရန် class_exists () ကို သုံးနိုင်သည်။
PSR သတ်မှတ်ချက်နှင့်ဒီဇိုင်းစိတ်ကူးများ - is_a () ကိုဆင်ခြင်တုံတရားအသုံးပြုခြင်းသည်လုံခြုံစိတ်ချရသောလုံခြုံမှုကိုမြှင့်တင်ပေးနိုင်သည်။ သို့သော်အလွန်အမင်းမှီခိုမှုသည်ပွင့်လင်းမှုနှင့်ပိတ်သိမ်းခြင်းနိယာမကိုလည်းချိုးဖောက်နိုင်သည်။ ၎င်းကို interface ဖြင့်အသုံးပြုရန်အကြံပြုသည်။