လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> အမည်မဖော်လိုသောအတန်းများကိုဆုံးဖြတ်ရန် IS_A () ကိုအသုံးပြုသောအခါထောင်ချောက်များကားအဘယ်နည်း။ အမှန်တကယ်ကိစ္စတွင်ခွဲခြမ်းစိတ်ဖြာခြင်း

အမည်မဖော်လိုသောအတန်းများကိုဆုံးဖြတ်ရန် IS_A () ကိုအသုံးပြုသောအခါထောင်ချောက်များကားအဘယ်နည်း။ အမှန်တကယ်ကိစ္စတွင်ခွဲခြမ်းစိတ်ဖြာခြင်း

M66 2025-06-04

PHP တွင် is_a () function သည်အရာဝတ်ထုတစ်ခုသည်အချို့သောလူတန်းစားသို့မဟုတ်ယင်း၏ subclass ကိုပိုင်သည်ကိုဆုံးဖြတ်ရန်အသုံးပြုသည်။ ၎င်းသည်အမျိုးအစားစစ်ဆေးခြင်းနှင့် Object-Oriented Programming အတွက်အလွန်အသုံးဝင်သည်။ သို့သော်အမည်မဖော်လိုသောအတန်းအစားပါ 0 င်သည့်အခါ is_a () ၏အပြုအမူသည်မမျှော်လင့်သော "တွင်းများ" ဖြစ်နိုင်သည်။

ဤဆောင်းပါးသည်အမည်မသိအတန်းများကို is_a () ကို အသုံးပြု. အမည်မသိအတန်းများကိုအကဲဖြတ်သည့်အခါကြုံတွေ့ရမည့်ပြ problems နာများကိုနက်နက်နဲနဲခွဲခြမ်းစိတ်ဖြာရန်သတ်သတ်မှတ်မှတ်ရောဂါများကိုနက်နက်နဲနဲဆန်းစစ်လေ့လာရန်ပေါင်းစပ်ထားပါသည်။


1 ။ is_a ၏အခြေခံအသုံးပြုမှု ()

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

ဒါကအရမ်းလိုပဲ။


2 ။ အမည်မသိ၏အထူးသဘောသဘာဝ

အမည်မသိအတန်းများသည်အတန်းအစားအမည်များမပါဘဲ Runtime တွင် dynamure တွင် dynamure တွင်သတ်မှတ်ထားသည့်အတန်းများဖြစ်သည်။ ဥပမာအားဖြင့်:

 $anon = new class {
    public function sayHello() {
        return "Hello";
    }
};

အမည်မသိအတန်းကို class@anonymous/path/to/File.php ကဲ့သို့သောအတွင်းပိုင်းအမည်ကို PHP မှလိုင်းအမည်ကို သတ်မှတ်ပေးလိမ့်မည်။ သို့သော်ဤနာမတော်သည်ခန့်မှန်းရခက်သည်,


3 ။ is_a () ကို အသုံးပြုသောအခါ,

ဖြစ်ရပ်ဆန္ဒပြပွဲ

ကျွန်ုပ်တို့တွင်အောက်ပါကုဒ်ရှိသည်ဆိုပါစို့။

 class Base {}

$anon = new class extends Base {};

var_dump(is_a($anon, 'Base'));           // ထုတ်လုပ်ခြင်း true
var_dump(is_a($anon, 'class@anonymous')); // ထုတ်လုပ်ခြင်း false,အမည်မသိအတန်း၏အတွင်းပိုင်းအမည်ကိုအသိအမှတ်မပြုနိုင်ပါ

အကယ်. သင်သည်အမည်ဝှက်ထားသောအတန်းအစား၏အတွင်းပိုင်းအမည်ကိုတိုက်ရိုက်အသုံးပြုပါကဆုံးဖြတ်ချက်ချရန်မှန်ကန်သောကိုက်ညီမှုရှိရန်နှင့်လမ်းကြောင်းမှန်ပေါ်တွင်လမ်းကြောင်းများနှင့်လိုင်းနံပါတ်များပါ 0 င်သောကြောင့်မှန်ကန်စွာကိုက်ညီရန်ခက်ခဲသည်။


သင်္ချိုင်း 1: အမည်မသိအတန်းအစားအမည်များသည်မထိန်းချုပ်နိုင်ပါ

အမည်မသိအတန်းအစားတွင်ဖိုင်လမ်းကြောင်းနှင့်လိုင်းနံပါတ်ပါ 0 င်သည်။

 class@anonymous /path/to/file.php:10

၎င်းသည်ကျွန်ုပ်တို့အားဆုံးဖြတ်ချက်ချရန်အမည်မသိအတန်းအစားအမည်များကိုဆွဲဆောင်ရန်မဖြစ်နိုင်ပါ။


PIT 2: အမည်ဝှက်ထားသောအတန်းအစားအမည်များကိုကြိုးဖြင့်မကိုက်ညီပါ

is_a () ၏ဒုတိယ pareter သည် string type ၏ class name ဖြစ်ရမည်ဖြစ်သော်လည်းအမည်မသိအတန်းအစားအမည်ကိုရည်ညွှန်းရန်နှင့်ရည်ညွှန်းရန်ခက်ခဲသည်မဟုတ်။


သင်္ချိုင်း 3: အမွေဆက်ခံမှုတရားစီရင်ခြင်းသည်မမှန်ကန်ပါ (အချို့အခြေအနေများ)

အမည်မသိအတန်းများသည်အခြားအတန်းများကိုအမွေဆက်ခံနိုင်သော်လည်းဥပမာအားဖြင့် အခြား အတန်းအစားများကိုအမွေဆက်ခံနိုင်သည်။


4 ။ လက်တွေ့ကျသောဖြေရှင်းနည်းများ

ဖြေရှင်းချက် 1 - မိဘအတန်းကိုတရားသူကြီး

အမည်မသိအတန်းများသည်တိကျသောလူတန်းစားကိုအမွေဆက်ခံသည့်အတန်းများအနေဖြင့်အများအားဖြင့်အများအားဖြင့်မိဘအတန်းအစား၏ဥပမာတစ်ခုရှိမရှိကိုများသောအားဖြင့်ဆုံးဖြတ်ကြသည်။

 var_dump(is_a($anon, Base::class)); // true

၎င်းသည်၎င်းကိုလုပ်ရန်အလွယ်ကူဆုံးနှင့်အကြံပြုထားသည့်နည်းလမ်းဖြစ်သည်။


ဖြေရှင်းချက် 2 - interfaces နှင့်အမည်မသိအတန်းများကိုသတ်မှတ်ပါ

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

ဖြေရှင်းချက် 3 - အမည်မသိအတန်းအစား၏အတွင်းပိုင်းအမည်ကို အသုံးပြု. တရားစီရင်ခြင်းမပြုပါနှင့်

အကယ်. အထူးလိုအပ်ချက်မဟုတ်လျှင် Code သည်အမည်မဖော်လိုသောအတန်းများ၏ "စစ်မှန်သောအတန်းအစားအမည်" ကိုအကဲဖြတ်ခြင်းကိုရှောင်ရှားသင့်သည်။


5 ။ နမူနာကုဒ်ကိုအပြည့်အဝ

 <?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 ခဲယဉ်းသောတရားစီရင်ခြင်းအတွက်မသင့်တော်ပါ

6 ။ အကျဉ်းချုပ်

  • အမည်မသိအတန်းအစား၏အတန်းအစားအမည်ကိုလမ်းကြောင်းနှင့်လိုင်းနံပါတ်တစ်ခုဖြင့်ပုံမှန်အားဖြင့်ထုတ်လုပ်သည်။

  • မည်သည့်အချိန်တွင် is_a () သည် အမည်မဖော်လိုသောအတန်းအစားသာမန်ဥပမာတစ်ခုဖြစ်ခြင်းရှိ, မရှိသည့်အဖြစ်အပျက်တစ်ခုကိုဆုံးဖြတ်သည်။

  • အမည်မသိအတန်းအစား "Real Class Name" ကိုတိုက်ရိုက်မှီခိုရှောင်ရှားရန်အရာဝတ်ထုကိုမိဘအတန်းအစားသို့မဟုတ် interface ကို ဖြတ်. အရာဝတ်ထုကိုဆုံးဖြတ်ရန်အကြံပြုပါသည်။

  • ဤနည်းဖြင့်ရေးသားထားသောကုဒ်သည်ပိုမိုခိုင်မာပြီးအရာဝတ်ထု -oriented design ၏နိယာမနှင့်ကိုက်ညီသည်။


သင်၏ကုဒ်ထဲ၌အမည်ဝှက်ထားသောအတန်းများတွင်အမည်မဖော်လိုသောအတန်းများဖြင့်သင့်တွင်စာအမျိုးအစားတွင်တရားစီရင်ခြင်းနှင့်ပတ်သက်သောစာအမျိုးအစားတွင်ထည့်သွင်းစဉ်းစားပါ။ PHP အမည်မဖော်လိုသောအတန်းများနှင့် is_a () ကို နားလည်ရန်ဤဆောင်းပါးသည်သင်အတွက်အထောက်အကူဖြစ်လိမ့်မည်ဟုမျှော်လင့်ပါ။