PHP တွင် is_a () function သည်အရာဝတ်ထုတစ်ခုသည်အချို့သောလူတန်းစားသို့မဟုတ်ယင်း၏ subclass ကိုပိုင်သည်ကိုဆုံးဖြတ်ရန်အသုံးပြုသည်။ ၎င်းသည်အမျိုးအစားစစ်ဆေးခြင်းနှင့် Object-Oriented Programming အတွက်အလွန်အသုံးဝင်သည်။ သို့သော်အမည်မဖော်လိုသောအတန်းအစားပါ 0 င်သည့်အခါ is_a () ၏အပြုအမူသည်မမျှော်လင့်သော "တွင်းများ" ဖြစ်နိုင်သည်။
ဤဆောင်းပါးသည်အမည်မသိအတန်းများကို is_a () ကို အသုံးပြု. အမည်မသိအတန်းများကိုအကဲဖြတ်သည့်အခါကြုံတွေ့ရမည့်ပြ problems နာများကိုနက်နက်နဲနဲခွဲခြမ်းစိတ်ဖြာရန်သတ်သတ်မှတ်မှတ်ရောဂါများကိုနက်နက်နဲနဲဆန်းစစ်လေ့လာရန်ပေါင်းစပ်ထားပါသည်။
is_a () function ကို syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
is_a(object|string $object_or_class, string $class_name, bool $allow_string = false): bool
၎င်းကို $ object_or_Class ဆိုသည်မှာ $ class_name ၏ဥပမာတစ်ခုသို့မဟုတ် subclass ရှိမရှိဆုံးဖြတ်ရန်အသုံးပြုသည်။
ရိုးရှင်းသောဥပမာတစ်ခုပေးရန်
class Foo {}
$obj = new Foo();
var_dump(is_a($obj, 'Foo')); // true
ဒါကအရမ်းလိုပဲ။
အမည်မသိအတန်းများသည်အတန်းအစားအမည်များမပါဘဲ Runtime တွင် dynamure တွင် dynamure တွင်သတ်မှတ်ထားသည့်အတန်းများဖြစ်သည်။ ဥပမာအားဖြင့်:
$anon = new class {
public function sayHello() {
return "Hello";
}
};
အမည်မသိအတန်းကို class@anonymous/path/to/File.php ကဲ့သို့သောအတွင်းပိုင်းအမည်ကို PHP မှလိုင်းအမည်ကို သတ်မှတ်ပေးလိမ့်မည်။ သို့သော်ဤနာမတော်သည်ခန့်မှန်းရခက်သည်,
ကျွန်ုပ်တို့တွင်အောက်ပါကုဒ်ရှိသည်ဆိုပါစို့။
class Base {}
$anon = new class extends Base {};
var_dump(is_a($anon, 'Base')); // ထုတ်လုပ်ခြင်း true
var_dump(is_a($anon, 'class@anonymous')); // ထုတ်လုပ်ခြင်း false,အမည်မသိအတန်း၏အတွင်းပိုင်းအမည်ကိုအသိအမှတ်မပြုနိုင်ပါ
အကယ်. သင်သည်အမည်ဝှက်ထားသောအတန်းအစား၏အတွင်းပိုင်းအမည်ကိုတိုက်ရိုက်အသုံးပြုပါကဆုံးဖြတ်ချက်ချရန်မှန်ကန်သောကိုက်ညီမှုရှိရန်နှင့်လမ်းကြောင်းမှန်ပေါ်တွင်လမ်းကြောင်းများနှင့်လိုင်းနံပါတ်များပါ 0 င်သောကြောင့်မှန်ကန်စွာကိုက်ညီရန်ခက်ခဲသည်။
အမည်မသိအတန်းအစားတွင်ဖိုင်လမ်းကြောင်းနှင့်လိုင်းနံပါတ်ပါ 0 င်သည်။
class@anonymous /path/to/file.php:10
၎င်းသည်ကျွန်ုပ်တို့အားဆုံးဖြတ်ချက်ချရန်အမည်မသိအတန်းအစားအမည်များကိုဆွဲဆောင်ရန်မဖြစ်နိုင်ပါ။
is_a () ၏ဒုတိယ pareter သည် string type ၏ class name ဖြစ်ရမည်ဖြစ်သော်လည်းအမည်မသိအတန်းအစားအမည်ကိုရည်ညွှန်းရန်နှင့်ရည်ညွှန်းရန်ခက်ခဲသည်မဟုတ်။
အမည်မသိအတန်းများသည်အခြားအတန်းများကိုအမွေဆက်ခံနိုင်သော်လည်းဥပမာအားဖြင့် အခြား အတန်းအစားများကိုအမွေဆက်ခံနိုင်သည်။
အမည်မသိအတန်းများသည်တိကျသောလူတန်းစားကိုအမွေဆက်ခံသည့်အတန်းများအနေဖြင့်အများအားဖြင့်အများအားဖြင့်မိဘအတန်းအစား၏ဥပမာတစ်ခုရှိမရှိကိုများသောအားဖြင့်ဆုံးဖြတ်ကြသည်။
var_dump(is_a($anon, Base::class)); // true
၎င်းသည်၎င်းကိုလုပ်ရန်အလွယ်ကူဆုံးနှင့်အကြံပြုထားသည့်နည်းလမ်းဖြစ်သည်။
interface ကို သတ်မှတ်. အမည်မသိအတန်းကိုအကောင်အထည်ဖော်ရန် enable လုပ်ပါ။
interface SayHelloInterface {
public function sayHello();
}
$anon = new class implements SayHelloInterface {
public function sayHello() {
return "Hello";
}
};
var_dump(is_a($anon, SayHelloInterface::class)); // true
အကယ်. အထူးလိုအပ်ချက်မဟုတ်လျှင် Code သည်အမည်မဖော်လိုသောအတန်းများ၏ "စစ်မှန်သောအတန်းအစားအမည်" ကိုအကဲဖြတ်ခြင်းကိုရှောင်ရှားသင့်သည်။
<?php
class Base {
public function who() {
return "I am Base";
}
}
interface GreetInterface {
public function greet(): string;
}
// အမည်မသိအမွေဆက်ခံ Base
$anon1 = new class extends Base {
public function who() {
return "I am Anonymous extending Base";
}
};
// အမည်မသိအတန်းအစားအကောင်အထည်များ interface ကို
$anon2 = new class implements GreetInterface {
public function greet(): string {
return "Hello from anonymous";
}
};
echo is_a($anon1, Base::class) ? "anon1 is Base\n" : "anon1 is NOT Base\n";
echo is_a($anon2, GreetInterface::class) ? "anon2 implements GreetInterface\n" : "anon2 does NOT implement GreetInterface\n";
// အမှားသရုပ်ပြ:အမည်မသိအတန်း၏အတွင်းပိုင်းအမည်ကိုတိုက်ရိုက်အကဲဖြတ်ပါ(မရရှိနိုင်ပါ)
$className = get_class($anon1);
echo "Class name of anon1: $className\n";
var_dump(is_a($anon1, $className)); // true, ဒါပေမဲ့ $className ခဲယဉ်းသောတရားစီရင်ခြင်းအတွက်မသင့်တော်ပါ
အမည်မသိအတန်းအစား၏အတန်းအစားအမည်ကိုလမ်းကြောင်းနှင့်လိုင်းနံပါတ်တစ်ခုဖြင့်ပုံမှန်အားဖြင့်ထုတ်လုပ်သည်။
မည်သည့်အချိန်တွင် is_a () သည် အမည်မဖော်လိုသောအတန်းအစားသာမန်ဥပမာတစ်ခုဖြစ်ခြင်းရှိ, မရှိသည့်အဖြစ်အပျက်တစ်ခုကိုဆုံးဖြတ်သည်။
အမည်မသိအတန်းအစား "Real Class Name" ကိုတိုက်ရိုက်မှီခိုရှောင်ရှားရန်အရာဝတ်ထုကိုမိဘအတန်းအစားသို့မဟုတ် interface ကို ဖြတ်. အရာဝတ်ထုကိုဆုံးဖြတ်ရန်အကြံပြုပါသည်။
ဤနည်းဖြင့်ရေးသားထားသောကုဒ်သည်ပိုမိုခိုင်မာပြီးအရာဝတ်ထု -oriented design ၏နိယာမနှင့်ကိုက်ညီသည်။
သင်၏ကုဒ်ထဲ၌အမည်ဝှက်ထားသောအတန်းများတွင်အမည်မဖော်လိုသောအတန်းများဖြင့်သင့်တွင်စာအမျိုးအစားတွင်တရားစီရင်ခြင်းနှင့်ပတ်သက်သောစာအမျိုးအစားတွင်ထည့်သွင်းစဉ်းစားပါ။ PHP အမည်မဖော်လိုသောအတန်းများနှင့် is_a () ကို နားလည်ရန်ဤဆောင်းပါးသည်သင်အတွက်အထောက်အကူဖြစ်လိမ့်မည်ဟုမျှော်လင့်ပါ။