လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Factory Mode တွင် IS_A () function ကို အသုံးပြု. ပြန်လာသောအရာဝတ်ထုအမျိုးအစားကိုမည်သို့စစ်ဆေးရမည်နည်း။

Factory Mode တွင် IS_A () function ကို အသုံးပြု. ပြန်လာသောအရာဝတ်ထုအမျိုးအစားကိုမည်သို့စစ်ဆေးရမည်နည်း။

M66 2025-07-18

PHP Development တွင်စက်ရုံပုံစံသည်ဘုံဒီဇိုင်းပုံစံဖြစ်သည်။ ၎င်းသည်စနစ်ဖွဲ့စည်းတည်ဆောက်ပုံကို Encapsulated Obserts ၏ဖန်တီးမှုဖြစ်စဉ်ကိုမှတဆင့်ပိုမိုပြောင်းလွယ်ပြင်လွယ်နှင့်လွယ်ကူစွာချဲ့ထွင်ရန်လွယ်ကူစေသည်။ သို့သော်စက်ရုံတစ်ခုသည် parameters များအပေါ် အခြေခံ. အမျိုးမျိုးသောအရာဝတ်ထုအမျိုးအစားများကိုပြန်လည်ရောက်ရှိလာသောအခါပြန်လည်နေရာချထားသည့်အရာဝတ်ထုအမျိုးအစားသည်မျှော်လင့်ချက်များနှင့်ကိုက်ညီစေရန်နည်းလမ်းတစ်ခုလိုအပ်သည်။ is_a () function ကဒီပြီးမြောက်အောင်မြင်အောင်ကူညီပေးနိုင်ပါတယ်။

is_a () ကဘာလဲ?

is_a () သည် PHP တွင် built-in function တစ်ခုဖြစ်သည်။ အရာဝတ်ထုတစ်ခုသည်အတန်းတစ်ခု၏ဥပမာတစ်ခုသို့မဟုတ်၎င်းသည်အချို့သောအတန်းမှအမွေဆက်ခံနေသည်။ အခြေခံ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -

 is_a(object|string $object_or_class, string $class, bool $allow_string = false): bool
  • $ Object_or_Class : ရှာဖွေတွေ့ရှိရန်အရာဝတ်ထုသို့မဟုတ်အတန်းအစားအမည်။

  • $ အတန်း - မျှော်လင့်ထားသည့်အတန်းအစားအမည်။

  • $ Allow_String : Object Class Name ကို strings (PHP 8.0 အပြီးတွင်ကန့်ကွက်သည်။

စက်ရုံ mode မှာလျှောက်လွှာအခြေအနေများ

filelogger, databaselogger စသည့်ကွဲပြားခြားနားသော configurations စသည့်ကွဲပြားခြားနားသော configurations များနှင့်အညီကျွန်ုပ်တို့သည် log systems အမျိုးမျိုးကိုဖြည့်ဆည်းပေးနေသည်ဆိုပါစို့။ Processor သည်ဤ interface ကိုအကောင်အထည်ဖော်ခြင်းမရှိပါကနည်းလမ်းကိုခေါ်ဆိုသည့်အခါအမှားတစ်ခုကိုရှာဖွေတွေ့ရှိမည့်အစားကျွန်ုပ်တို့သည်ချွင်းချက်တစ်ခုကိုချက်ချင်းပစ်သင့်သည်။

နမူနာကုဒ်

 interface LoggerInterface {
    public function log(string $message): void;
}

class FileLogger implements LoggerInterface {
    public function log(string $message): void {
        // ဖိုင်မှတ်တမ်းသို့ရေးပါ
        echo "FileLogger: $message\n";
    }
}

class DatabaseLogger implements LoggerInterface {
    public function log(string $message): void {
        // ဒေတာဘေ့စ်မှတ်တမ်းသို့ရေးပါ
        echo "DatabaseLogger: $message\n";
    }
}

class LoggerFactory {
    public static function create(string $type): LoggerInterface {
        switch ($type) {
            case 'file':
                $logger = new FileLogger();
                break;
            case 'database':
                $logger = new DatabaseLogger();
                break;
            default:
                throw new InvalidArgumentException("မထောက်ပံ့သောမှတ်တမ်းအမျိုးအစားများ: $type");
        }

        // ပြန်လာအမျိုးအစား Verify
        if (!is_a($logger, LoggerInterface::class)) {
            throw new RuntimeException("ဖန်တီးထားသောအရာဝတ်ထုအကောင်အထည်ဖော်မပေးပါ LoggerInterface");
        }

        return $logger;
    }
}

ဤဥပမာတွင် loggerfactory :: Create () သည် 0 င်ရောက်လာသည့် $ အမျိုးအစား ပေါ်မူတည်ပြီးသက်ဆိုင်ရာမှတ်တမ်းပရိုဆက်ဆာကိုဖန်တီးသည်။ ကျွန်ုပ်တို့သည် is_a () function ကို အသုံးပြု. $ logger ကို $ logger ပရိုဂရမ်သည် loggerprace interface ကိုအကောင်အထည်ဖော်သည်ကိုအတည်ပြုရန်အသုံးပြုသည်။ အကောင်အထည်မဖော်ဘူးဆိုရင်ခြွင်းချက်တစ်ခုပစ်ချလိုက်တယ်။ ၎င်းသည်အမှားအယွင်းများကိုဖွံ့ဖြိုးရေးအဆင့်တွင်တတ်နိုင်သမျှစောစီးစွာတွေ့ရှိနိုင်ပြီးကုဒ်၏ကြံ့ခိုင်မှုကိုတိုးတက်စေနိုင်သည်။

လက်တွေ့ကျတဲ့ applications မှာမှတ်သားဖို့အရာ

တကယ့်စီမံကိန်းတစ်ခုတွင်, configuration file (သို့) ဒေတာဘေ့စ်မှမှတ်တမ်းအမျိုးအစားများကိုသင်ဖတ်ရှုနိုင်သည်။

 $config = parse_ini_file('https://m66.net/config/logger.ini');
$loggerType = $config['logger_type'] ?? 'file';
$logger = LoggerFactory::create($loggerType);
$logger->log("System Institutation ပြီးစီးခဲ့သည်。");

Configuration data သည်ပြင်ပ input မှဆင်းသက်လာလျှင်ပင် configuration အမှားများကြောင့်ခက်ခဲသောပြ problems နာများကိုကာကွယ်ရန်ခက်ခဲသောပြ problems နာများကိုတားဆီးရန် IS_A () ယန္တရားကိုကြည့်ရှုနိုင်သည်။

အကျဉ်းချုပ်

is_a () function ကိုအသုံးပြုခြင်းသည်စက်ရုံပုံစံတွင်ပြန်လာသောအရာဝတ်ထုအမျိုးအစားကိုအတည်ပြုရန်အဆင်သင့်ဖြစ်သည့်အလေ့အကျင့်တစ်ခုဖြစ်ပြီး၎င်းသည်အရာဝတ်ထုများ၏ရှေ့နောက်ညီညွတ်မှုကိုသေချာစေရန်နှင့် interface Mismatch ၏ပြ problem နာကိုရှောင်ရှားနိုင်သည့်ကောင်းသောအလေ့အကျင့်တစ်ခုဖြစ်သည်။ ဤအတည်ပြုခြင်းယန္တရားသည်အထူးသဖြင့်ကြီးမားသောစနစ်များသို့မဟုတ်မြင့်မားသောရရှိနိုင်သည့်ပတ်ဝန်းကျင်တွင်အသုံးပြုရန်အတွက်သင့်လျော်သည်။ အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်မျှော်လင့်ထားသည့် interface or abstract classify ကိုလိုက်နာရန်အတွက်စက်ရုံနည်းလမ်းရှိပြန်လာသောအရာဝတ်ထုကိုအမြဲတမ်းစစ်ဆေးရန်ကျွန်ုပ်တို့အကြံပြုပါသည်။