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