Daily Php Development တွင် variable သည်တိကျသောလူတန်းစားတစ်ခု၏ဥပမာတစ်ခုရှိမရှိကိုကျွန်ုပ်တို့မကြာခဏအတည်ပြုရန်လိုအပ်သည်။ PHP သည် Instanceof Operator, is_a () functions is is_a () function သည်ပထမဆုံးသောရွေးချယ်မှုတစ်ခုဖြစ်လာသော်လည်း PHP သည်တရားစီရင်ခြင်းအမျိုးအစားများကိုပေးသော်လည်း developer များနှင့်ရိုးရှင်းမှုကြောင့်ပထမဆုံးရွေးချယ်မှုဖြစ်လာသည်။
ဤဆောင်းပါးသည် is_a () function ကို အခြေခံ. ရိုးရှင်းသောအမျိုးအစားစစ်ဆေးမှုကိရိယာအတန်းကိုတည်ဆောက်ရန်,
is_a () သည် PHP မှပေးသော built-in function တစ်ခုဖြစ်ပြီးအရာဝတ်ထုတစ်ခုသည်အချို့သောလူတန်းစားတစ်ခုသို့မဟုတ်ထိုအတန်း၏ subclass ကိုပိုင်ဆိုင်သည်ကိုဆုံးဖြတ်ရန်အသုံးပြုသည်။
bool is_a(object|string $object_or_class, string $class, bool $allow_string = false)
$ Office_or_Class : စစ်ဆေးရန်အရာဝတ်ထုသို့မဟုတ်အတန်းအစားအမည်။
$ အတန်း : ပစ်မှတ်အတန်းအစားအမည်။
$ Allow_String - အရာဝတ်ထုအမည်ကိုကြိုးကြိုးများဖြင့်ဖြတ်သန်းရန်ခွင့်ပြုသင့်သည် (static ခေါ်ဆိုမှုများအတွက်) ။
Type Judge Judge Judge Judge Legic ကိုရိုးရှင်းစေရန်ရိုးရှင်းသောကိရိယာအတန်း cym cypechecker ကို လွယ်ကူစွာ encapsulate လုပ်ရန် is_a () function ကိုအသုံးပြုမည်။
<code>
class TypeChecker
{
/**
* အရာဝတ်ထုသည်အချို့သောလူတန်းစား၏ဥပမာတစ်ခုရှိမရှိဆုံးဖြတ်ပါ
*
* @param object|string $objectOrClass
* @param string $expectedClass
* @param bool $allowString
* @return bool
*/
public static function isInstanceOf($objectOrClass, string $expectedClass, bool $allowString = false): bool
{
return is_a($objectOrClass, $expectedClass, $allowString);
}
/**
* မျိုးစုံအရာဝတ်ထုအမျိုးအစားများကိုသုတ်သင်ရှင်းလင်းရေး
*
* @param array $objectsWithExpectedClasses
* @return array
*/
public static function validateMultiple(array $objectsWithExpectedClasses): array
{
$results = [];
foreach ($objectsWithExpectedClasses as $label => [$objectOrClass, $expectedClass]) {
$results[$label] = self::isInstanceOf($objectOrClass, $expectedClass);
}
return $results;
}
}
</code>
ဤအတန်းသည်နည်းလမ်းနှစ်မျိုးကိုပေးသည်။
isinstanceof () - တစ်ခုတည်းသောအရာဝတ်ထုအမျိုးအစားကိုစစ်ဆေးပါ။
ReliverTeMultiple () - အရာဝတ်ထုနှင့်အတန်းများအကြားစာပေးစာယူကိုအသုတ်စစ်ဆေးခြင်းကိုထောက်ပံ့သည်။
အမှန်တကယ်စီမံကိန်းများတွင်ဤ tool အတန်းကိုမည်သို့အသုံးပြုသည်ကိုကြည့်ကြပါစို့။
<code>
interface LoggerInterface {}
class FileLogger implements LoggerInterface {}
class MailLogger {}
$logger1 = new FileLogger();
$logger2 = new MailLogger();
// တစ်ခုတည်းစိစစ်အတည်ပြု
if (TypeChecker::isInstanceOf($logger1, LoggerInterface::class)) {
echo "logger1 ဟုတ်ကဲ့ LoggerInterface ရာထူးဥပမာ\n";
}
// အတည်ပြုစိစစ်အတည်ပြု
$results = TypeChecker::validateMultiple([
'fileLogger' => [$logger1, LoggerInterface::class],
'mailLogger' => [$logger2, LoggerInterface::class],
]);
print_r($results);
</code>
output ရလဒ်သည်အောက်ပါအတိုင်းဖြစ်သည် -
logger1 ဟုတ်ကဲ့ LoggerInterface ရာထူးဥပမာ
Array
(
[fileLogger] => 1
[mailLogger] =>
)
Configuration file မှအတန်းကိုတက်ကြွစွာဖွင့်ပြီးအရာဝတ်ထုကိုအလျင်အမြန်ဖွင့်ပြီးအရာဝတ်ထုကိုအလျင်အမြန်ဖွင့်သည်ဆိုပါစို့။ ဤအတန်းများသည်အလိုရှိသော interface ကိုအကောင်အထည်ဖော်ရန်နှင့် runtime တွင်အမှားအယွင်းများကိုရှောင်ရှားရန်သေချာစေရန် cymeechecker ကို သင်အသုံးပြုနိုင်သည်။
<code>
class LoggerFactory
{
public static function create(string $className): LoggerInterface
{
$instance = new $className();
if (!TypeChecker::isInstanceOf($instance, LoggerInterface::class)) {
throw new InvalidArgumentException("အမျိုးအစား $className အောင်မြင်ရမည်ဖြစ်သည် LoggerInterface ထိသိျက်နှာ");
}
return $instance;
}
}
$logger = LoggerFactory::create('FileLogger'); // ပုံမှန်ဖြစ်သော
$logger = LoggerFactory::create('MailLogger'); // ခြွင်းချက်ပစ်
</code>
ရိုးရှင်းသောအမျိုးအစားစိစစ်အတည်ပြုကိရိယာအတန်းကို is_a () ကို conclary accapsuling encapsulating encapsuls encapsuls encapsult သည် code ၏ကြံ့ခိုင်ခြင်းနှင့်ဖတ်နိုင်မှုကိုများစွာတိုးတက်စေနိုင်သည်။ အသေးစားနှင့်အလတ်စားစီမံကိန်းများတွင်အခြေခံအမျိုးအစားရှာဖွေတွေ့ရှိမှုအတွက်ဖြစ်စေ, သို့မဟုတ်ကြီးမားသောမူဘောင်များတွင်လုံခြုံရေးစစ်ဆေးနေသည့်အလွှာတစ်ခုအနေဖြင့်၎င်းသည်အသုံးဝင်သည်။
အကယ်. သင်သည်ပြည့်စုံသောအတည်ပြုစနစ်ကိုထပ်မံတည်ဆောက်လိုပါက URL အရင်းအမြစ်နှင့်မှီခိုသောဆေးထိုးဆေးများကဲ့သို့သောယုတ္တိဗေဒများကိုအတည်ပြုနိုင်သည်။ ဥပမာအားဖြင့်, 0 န်ဆောင်မှုဆိုင်ရာ registry တွင် classify သည်လိုအပ်သော interface ကိုအကောင်အထည်ဖော်ရန်သို့မဟုတ်သတ်သတ်မှတ်မှတ်အခြေခံအကျဆုံးအမှားအယွင်းများကိုအမွေဆက်ခံသည်ဖြစ်စေ,