PHP တွင်အမျိုးအစားရှာဖွေတွေ့ရှိခြင်းကိုပြုလုပ်သောအခါ is_a () သည်အလွန်လက်တွေ့ကျသောလုပ်ဆောင်ချက်တစ်ခုဖြစ်ပြီးအရာဝတ်ထုတစ်ခုသည်အတန်းတစ်ခု၏ဥပမာတစ်ခု, သို့သော် is_a () ကို အသုံးပြုခြင်းသည်တစ်ခါတစ်ရံပိုမိုရှုပ်ထွေးသောမြင်ကွင်းများကိုကိုင်တွယ်ရန်ခက်ခဲစေသည်, ယခုအချိန်တွင် is_a () နှင့် ရောင်ပြန်ဟပ်မှုကို အသုံးပြုခြင်းသည်ကုဒ်၏ပြောင်းလွယ်ပြင်လွယ်မှုနှင့်ထိန်းသိမ်းခြင်းကိုများစွာတိုးတက်စေနိုင်သည်။
is_a () ၏အခြေခံ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
is_a(object|string $object_or_class, string $class, bool $allow_string = false): bool
ရိုးရှင်းသောဥပမာတစ်ခုပေးရန်
class Animal {}
class Dog extends Animal {}
$dog = new Dog();
if (is_a($dog, Animal::class)) {
echo "ဟုတ်ကဲ့ Animal ဥပမာအားဖြင့်သို့မဟုတ် subclass";
}
ဤဥပမာတွင် IS_A () သည် $ ခွေး သည် တိရိစ္ဆာန် လူတန်းစားသို့မဟုတ်၎င်း၏ subclass ၏ဥပမာတစ်ခုရှိမရှိဆုံးဖြတ်သည် ။
RefnessClass သည် PHP မှပေးသောရောင်ပြန်ဟပ်မှုယန္တရား၏အစိတ်အပိုင်းဖြစ်သည်။ ဥပမာအားဖြင့်, အချို့သောအတန်းတစ်ခုကအကောင်အထည်ဖော်မှုကိုအကောင်အထည်ဖော်ခြင်းစသဖြင့်ကျွန်ုပ်တို့က interface, မိဘအဆင့်အတန်းကိုစာရင်းပြုစုနိုင်သည်။
$reflection = new ReflectionClass(Dog::class);
echo $reflection->getName(); // ထုတ်လုပ်ခြင်း Dog
မိဘအတန်းအစားကိုလည်းကျွန်ုပ်တို့ရနိုင်သည်။
$parent = $reflection->getParentClass();
if ($parent) {
echo "父အမျိုးအစားဟုတ်ကဲ့:" . $parent->getName();
}
ပိုမိုရှုပ်ထွေးသောအခြေအနေများတွင်ကျွန်ုပ်တို့သည်အတန်းအစားအဆင့်ဆင့်၏အဆင့်အတန်းကိုပြန်လည်ဆန်းစစ်ခြင်းမှတဆင့်ခွဲခြမ်းစိတ်ဖြာရန်လိုအပ်လိမ့်မည် ။ ဥပမာအားဖြင့်, အောက်ပါကုဒ်သည်အတန်းအစားအမည်ကိုပြောင်းလဲပြီး၎င်းသည်အချို့သော interface ၏အကောင်အထည်ဖော်မှုအတန်းအစားကိုဆုံးဖြတ်နိုင်သည်။
function implementsInterface(string $className, string $interfaceName): bool {
if (!class_exists($className)) {
return false;
}
$reflection = new ReflectionClass($className);
return $reflection->implementsInterface($interfaceName);
}
is_a () ပေါင်းစပ်ခြင်းကအောက်ပါအတိုင်းဖြစ်သည်။
function isInstanceOfClassOrSubclass($object, string $className): bool {
return is_a($object, $className);
}
Combined Class သို့မဟုတ် Object တွင်အသေးစိတ်စစ်ဆေးမှုများပြုလုပ်ရန်ယေဘူယျအားဖြင့်ခွဲခြမ်းစိတ်ဖြာခြင်း function ကိုကျွန်ုပ်တို့ရေးနိုင်သည်။
function analyzeClass($input) {
$className = is_object($input) ? get_class($input) : $input;
if (!class_exists($className)) {
echo "အမျိုးအစား {$className} မတည်ရှိပါဘူး\n";
return;
}
$reflection = new ReflectionClass($className);
echo "အမျိုးအစား名: " . $reflection->getName() . PHP_EOL;
if ($parent = $reflection->getParentClass()) {
echo "父အမျိုးအစား: " . $parent->getName() . PHP_EOL;
}
$interfaces = $reflection->getInterfaceNames();
if ($interfaces) {
echo "အကောင်အထည်ဖော်မှု interface ကို: " . implode(", ", $interfaces) . PHP_EOL;
}
echo "ဟုတ်ကဲ့မဟုတ်抽象အမျိုးအစား: " . ($reflection->isAbstract() ? "ဟုတ်ကဲ့" : "မဟုတ်") . PHP_EOL;
echo "ဟုတ်ကဲ့မဟုတ်为指定အမျိုးအစား型的子အမျိုးအစား: " . (is_a($className, SomeBaseClass::class, true) ? "ဟုတ်ကဲ့" : "မဟုတ်") . PHP_EOL;
}
ခေါ်ဆိုမှုဥပမာ -
analyzeClass('m66.net\\UserController');
plug-in စနစ်များသို့မဟုတ် modular မူဘောင်များကိုတီထွင်သောအခါအတန်းတစ်ခုသည်အချို့သော interface တစ်ခုဖြစ်ခြင်းသို့မဟုတ်အခြေစိုက်စခန်းအတန်းအစားကိုအမွေဆက်ခံခြင်းရှိမရှိစစ်ဆေးရန်မကြာခဏလိုအပ်သည်။ ဥပမာအားဖြင့်, plugin တစ်ခုသည်စနစ်ဖြင့်မတင်မီ plugininterface interface ကိုအကောင်အထည်ဖော်ရမည်။
$pluginClass = 'm66.net\\MyPlugin';
if (implementsInterface($pluginClass, 'm66.net\\PluginInterface')) {
$pluginInstance = new $pluginClass();
// လုံခြုံသော plugins ကိုလုံခြုံ
}
ဤပုံစံသည်အထူးသဖြင့်မူဘောင်များ, CMS သို့မဟုတ် Middleware aditecture များတွင်ကြီးမားသော application များ၌အလွန်အသုံးများသည်။
is_a () နှင့် ရောင်ပြန်ဟပ်မှုများကို အသုံးပြုခြင်းပေါင်းစပ်ခြင်းဖြင့် PHP အစီအစဉ်များအားပိုမိုကောင်းမွန်သောပြောင်းလဲနေသောအမျိုးအစားအသိအမှတ်ပြုနိုင်မှုစွမ်းရည်ကိုပေးနိုင်သည်။ အထူးသဖြင့် Plug-in စနစ်များ, မှီခိုသောဆေးထိုးအပ်ကွန်တိန်နာကွန်တိန်နာကွန်တိန်နာများ,