PHP Object-Objected Programming တွင်အရာဝတ်ထုတစ်ခုသည်အချို့သောအတန်းတစ်ခု၏ဥပမာတစ်ခုဖြစ်မဟုတ်သည်ကိုဆုံးဖြတ်ရန်လိုအပ်သည်။ အဆိုပါ is_a () function ကိုဒီအတွက်မွေးဖွားသည်။ ၎င်းသည်အရာဝတ်ထုများနှင့်အတန်းများအကြားဆက်နွယ်မှုကိုအကဲဖြတ်ရန်အတိုချုပ်နည်းလမ်းဖြစ်သည်။ ၎င်းသည် polymorphism ကိုအကောင်အထည်ဖော်ရန်အတွက်အရေးကြီးသောကိရိယာတစ်ခုဖြစ်သည်။
bool is_a(object|string $object_or_class, string $class, bool $allow_string = false)
$ Office_or_Class : စစ်ဆေးရန်အရာဝတ်ထုသို့မဟုတ်အတန်းအစားအမည်။
$ အတန်း - နှိုင်းယှဉ်ရန်အတန်းအမည်။
$ Allow_String - Class Name String ကိုပထမ ဦး ဆုံး parameter အဖြစ်ခွင့်ပြုသင့်သည်ဖြစ်စေ, အကယ်. မှန်ကန် ပါကအတန်းအစားအမည် string ကိုဖြတ်သန်းသွားနိုင်သည်။
အရာဝတ်ထုသည်အတန်းအစားသို့မဟုတ်အတန်း၏ subclass နှင့်သက်ဆိုင်ကြောင်းညွှန်ပြရန် function ကို မှန်ကန်စွာ ပြန်ပို့သည် ။
class Animal {}
class Dog extends Animal {}
$dog = new Dog();
if (is_a($dog, 'Animal')) {
echo "ဒီအရာဝတ်ထုက Animal အတန်းဥပမာများ,或其子အတန်းဥပမာများ。";
} else {
echo "ဒီအရာဝတ်ထုမဟုတ်ပါဘူး Animal အတန်းဥပမာများ。";
}
ရလဒ်ရလဒ် -
ဒီအရာဝတ်ထုက Animal အတန်းဥပမာများ,或其子အတန်းဥပမာများ。
ဤဥပမာတွင် ခွေး သည် တိရိစ္ဆာန် များ၏ subclass ဖြစ်သည် ။
တစ်ခါတစ်ရံကျွန်ုပ်တို့သည်မူဘောင်များသို့မဟုတ်လုပ်ငန်းစဉ် configuration files များကိုအသုံးပြုသောအခါကျွန်ုပ်တို့သည်အမှန်တကယ်အရာဝတ်ထုများအစားအတန်းအမည်ရှိကြိုးများကိုရနိုင်သည်။ ဤအချိန်တွင် is_a () ၏တတိယ parameter ကိုသတ်မှတ်ခြင်းဖြင့်တရားစီရင်ခြင်းကိုရရှိနိုင်သည် ။
class User {}
$className = 'User';
if (is_a($className, 'User', true)) {
echo "ကြိုး '$className' အတန်းအစားအမည်ကိုကိုယ်စားပြုသည် User သို့မဟုတ်၎င်း၏ subclass。";
}
ဤနည်းလမ်းသည်အတန်းများ, မှီခိုမှုထိုးသွင်းခြင်းသို့မဟုတ်စက်ရုံစနစ်များကိုအလိုအလျောက်ဖွင့်ခြင်းတွင်အလွန်အသုံးဝင်သည်။
is_a () () နှင့် Instanceof operator များသည်လုပ်ဆောင်နိုင်စွမ်းတွင်အတန်ငယ်ဆင်တူသော်လည်းအောက်ပါကွဲပြားမှုများလည်းရှိသည်။
Instanceof သည်အော်ပရေတာတစ်ခုဖြစ်သည်။
IS_A () သည်တတိယ parameter မှတစ်ဆင့်အရာဝတ်ထုတစ်ခုသို့မဟုတ် string နှင့် control and အပြုအမူများဖြင့်ဖြတ်သန်းသွားသော function တစ်ခုဖြစ်သည်။
is_a () သည် Instanceof ထက်အနည်းငယ်ဖတ်နိုင်သည့်နည်းနည်းသော်လည်းပြောင်းလွယ်ပြင်လွယ်ရှိသည်။
ဥပမာနှိုင်းယှဉ်ခြင်း -
if ($dog instanceof Animal) {
// အသုံးပြု instanceof တရားသူကြီးအမျိုးအစား
}
if (is_a($dog, 'Animal')) {
// အသုံးပြု is_a() တရားသူကြီးအမျိုးအစား
}
အကယ်. သင်သည်အရာဝတ်ထုများကိုသာလုပ်ဆောင်ပါက Instanceof ကို အသုံးပြုရန်အကြံပြုသည်။ သင် string ကိုစီရင်ချက်ပံ့ပိုးရန်လိုအပ်ပါက is_a () ကို သုံးသင့်သည်။
Automatic Loading ယန္တရားအတွက် class အမွေဆက်ဆက်ဆက်ဆံရေးကိုဆုံးဖြတ်ပါ
$className = 'App\\Service\\UserService';
if (is_a($className, 'App\\Core\\BaseService', true)) {
// ဤအတန်းသည်အခြေခံဝန်ဆောင်မှုအတန်းအစား၏ subclass ဖြစ်သည်,အစပြုသို့မဟုတ်မှတ်ပုံတင်နိုင်ပါတယ်
}
စက်ရုံမော်ဒယ်တွင်တရားဝင်အမျိုးအစားများ
function createService($className) {
if (!is_a($className, 'App\\Service\\BaseService', true)) {
throw new Exception("တရားမဝင်ဝန်ဆောင်မှုများ:$className");
}
return new $className();
}
plug-in စနစ်တွင် plug-in interface ကိုအကောင်အထည်ဖော်ရန်ဆုံးဖြတ်ပါ
foreach ($pluginList as $pluginClass) {
if (is_a($pluginClass, 'PluginInterface', true)) {
$plugin = new $pluginClass();
$plugin->run();
}
}
PHP 5.3 နှင့်ပြီးနောက် IS_A ၏စွမ်းဆောင်ရည်နှင့်တည်ငြိမ်မှုသည်စွမ်းဆောင်ရည်နှင့်တည်ငြိမ်မှုကိုတိုးတက်ကောင်းမွန်အောင်ပြုလုပ်နိုင်သည်။ ထို့ကြောင့်၎င်းကိုသင်ယုံကြည်စိတ်ချစွာအသုံးပြုနိုင်သည်။
ဖြတ်သန်းအတန်းအမည်ရှိရမယ်, မဟုတ်ရင်အမှားတစ်ခုပစ်ချလိမ့်မည်။ အကယ်. သင်သည်အတန်းကိုသတ်မှတ်သည်မသေချာပါက၎င်းကို class_exists () ဖြင့်အသုံးပြုနိုင်သည်။
if (class_exists($className) && is_a($className, 'SomeBaseClass', true)) {
// ဘေးကင်းလုံခြုံမှုတရားသဖြင့်စီရင်
}
is_a () သည် PHP တွင်လက်တွေ့ကျသောလုပ်ဆောင်ချက်ဖြစ်ပြီး, is_a () ကို အသုံးပြုခြင်းအားဖြင့်သင်၏ကုဒ်ကိုပိုမိုလွယ်ကူချောမွေ့စေရန်အတွက်ပိုမိုပြောင်းလွယ်ပြင်လွယ်။ အရွယ်အစားအမျိုးမျိုးထုတ်လုပ်နိုင်ပြီး Object-oriented ရှုပ်ထွေးသောစနစ်များ, plug-in ယန္တရားများနှင့် 0 န်ဆောင်မှုကွန်တိန်နာများကဲ့သို့သောဗိသုကာများအတွက်သင့်တော်သည်။