Modern PHP Development တွင်မူမှီခိုဆေးထိုးခြင်းသည်အသုံးများသောဒီဇိုင်းပုံစံတစ်ခုဖြစ်သည်။ မှီခိုမှုတွင်ထိုးသွင်းခြင်းတွင်အရာဝတ်ထုတစ်ခုကိုအခြားတစ်ခုသို့ဖြတ်သန်းသွားသော်,
ထိုးဖောက် 0 င်ရောက်ခြင်းများသည်မျှော်လင့်ထားသည့်အမျိုးအစားများနှင့်ကိုက်ညီကြောင်းသေချာစေရန် PHP သည် IS_A () function သည်ရိုးရှင်းသောနှင့်လက်တွေ့ကျသောကိရိယာတစ်ခုဖြစ်သည်။ ဤဆောင်းပါးသည်အခြေခံမှီခိုမှုထိုးသွင်းစစ်ဆေးမှုယန္တရားကိုအကောင်အထည်ဖော်ရန် IS_A () function ကိုမည်သို့အသုံးပြုရမည်ကိုရှင်းပြပါမည်။
is_a () သည် PHP တွင် built-in function တစ်ခုဖြစ်ပြီး၎င်းသည်အရာဝတ်ထုတစ်ခုသည်အတန်းအစားသို့မဟုတ်၎င်း၏ subclass ၏ဥပမာတစ်ခုရှိမရှိဆုံးဖြတ်ရန်အသုံးပြုသည်။ function ရှေ့ပြေးပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -
is_a(object $object, string $class_name, bool $allow_string = false): bool
$ object : စစ်ဆေးရန်အရာဝတ်ထု (သို့) အတန်းအစားအမည် ( $ Allow_String သည် မှန်ကန်သည်) ။
$ class_name : ပစ်မှတ်အတန်းအစားအမည်။
$ Allow_string (PHP 5.3.9+) - အဝင်အတန်းအမည်များကို string form တွင်ခွင့်ပြုရန်ဖြစ်စေ။
$ အရာဝတ်ထု သည် $ class_name သို့မဟုတ်၎င်း၏ subclass ၏ဥပမာတစ်ခုဖြစ်ပါက function သည် မှန်ကန်စွာ ပြန်ပြောင်းသည် ။
ကျွန်ုပ်တို့တွင်ရိုးရှင်းသော 0 န်ဆောင်မှု interface loggerinterface တစ်ခုနှင့်အကောင်အထည်ဖော်မှုအတန်း အစား နှင့် classing class serviceconsumer ရှိသည်ဆိုပါစို့။ မှီခိုနေရသောအရာဝတ်ထုသည်သတ်မှတ်ထားသော interface ကိုအကောင်အထည်ဖော်ခြင်းရှိမရှိကိုစစ်ဆေးရန်အတွက်ကျွန်ုပ်တို့သည် is_a () function ကိုသုံးနိုင်သည်ဟုကျွန်ုပ်တို့မျှော်လင့်ပါသည်။
<?php
interface LoggerInterface {
public function log(string $message);
}
class FileLogger implements LoggerInterface {
public function log(string $message) {
echo "Logging message to file: $message\n";
}
}
class ServiceConsumer {
private $logger;
public function setLogger($logger) {
// သွား is_a() ကအကောင်အထည်ဖော်လျှင်စစ်ဆေးပါ LoggerInterface
if (is_a($logger, 'LoggerInterface')) {
$this->logger = $logger;
} else {
throw new InvalidArgumentException("Logger must implement LoggerInterface");
}
}
public function doSomething() {
$this->logger->log("Doing something important");
}
}
// အသုံးပြုမှုဥပမာ
$consumer = new ServiceConsumer();
$logger = new FileLogger();
$consumer->setLogger($logger);
$consumer->doSomething();
အထက်ပါကုဒ်၌:
Serviceconsumer အတန်းအစားတွင်မှတ်တမ်း 0 န်ဆောင်မှုများကိုထိုးသွင်းရန်အသုံးပြုသော setlogger () နည်းလမ်းရှိသည်။
ဆေးထိုးစဉ်မှာ $ logger ကို အကောင်အထည်ဖော် ခြင်းရှိမရှိဆုံးဖြတ်ရန် IS_A () function ကိုသုံးပါ။
တရားစီရင်ခြင်းပျက်ကွက်ပါကမှီခိုမှုအမျိုးအစားမှန်ကန်မှုကိုသေချာစေရန်ခြွင်းချက်တစ်ခုချထားသည်။
IS_A () function သည် PHP 5.3.9 ကတည်းကတတိယ parameter_string ကို ထောက်ပံ့သည်။ ဥပမာအားဖြင့်:
if (is_a($logger, 'LoggerInterface', true)) {
// ...
}
သင်၏ code တွင်မှီခိုမှုသည်အတန်းအစားအမည်ရှိသည့် string (ဥပမာအားဖြင့်စက်ရုံမုဒ်) တွင်) သည်အတန်းအမည်ရှိ string တစ်ခုဖြစ်ပါကဤ parameter သည်အသုံးပြုနိုင်သည်။
အကယ်. သင်၏စီမံကိန်းသည် namespace ကိုအသုံးပြုပါက is_a () ဟုခေါ်သည့်အခါအတန်းအစားနာမည်အပြည့်အစုံရေးရန်မမေ့ပါနှင့်။
if (is_a($logger, '\\MyApp\\Logger\\LoggerInterface')) {
// ...
}
is_a () သည်အရာဝတ်ထုအမျိုးအစားသည်မျှော်လင့်ချက်များနှင့်ကိုက်ညီမှုရှိမရှိဆုံးဖြတ်ရန်လွယ်ကူသောနည်းလမ်းတစ်ခုဖြစ်သည်။
is_a () ကို အသုံးပြုခြင်းသည်မှီခိုဆေးထိုးခြင်း၌ပြုလုပ်သောအခါ Runtime အမျိုးအစားအမှားများကိုရှောင်ရှားရန်ဆေးထိုးအရာဝတ်ထုကိုထိရောက်စွာစစ်ဆေးနိုင်သည်။
ခြွင်းချက်ကိုင်တွယ်နှင့်အတူပေါင်းစပ် code ကိုပိုပြီးကြံ့ခိုင်နိုင်ပါတယ်။
ကွဲပြားခြားနားသော PHP ဗားရှင်းများအတွက်, is_a ၏ parametersters ၏ကွဲပြားခြားနားမှုကွဲပြားခြားနားမှုကိုဂရုပြုပါ။
မှီခိုမှုထိုးခြင်းဟာခေတ်သစ် PHP ဒီဇိုင်းရဲ့အရေးပါတဲ့အပိုင်းဖြစ်တယ်။ is_a () function ကိုဆင်ခြင်တုံတရားအသုံးပြုခြင်းသည်ကျွန်ုပ်တို့အားလျင်မြန်စွာအကောင်အထည်ဖော်မှုကိုအကောင်အထည်ဖော်ရန်နှင့်ကုဒ်အရည်အသွေးကိုတိုးတက်အောင်လုပ်ခြင်းကိုလျင်မြန်စွာအကောင်အထည်ဖော်ရန်ကူညီနိုင်သည်။
<?php
interface LoggerInterface {
public function log(string $message);
}
class FileLogger implements LoggerInterface {
public function log(string $message) {
echo "Logging message to file: $message\n";
}
}
class ServiceConsumer {
private $logger;
public function setLogger($logger) {
if (is_a($logger, 'LoggerInterface')) {
$this->logger = $logger;
} else {
throw new InvalidArgumentException("Logger must implement LoggerInterface");
}
}
public function doSomething() {
$this->logger->log("Doing something important");
}
}
// ဥပမာအသုံးပြုမှု
$consumer = new ServiceConsumer();
$logger = new FileLogger();
$consumer->setLogger($logger);
$consumer->doSomething();