PHP တွင် is_a function သည်အရာဝတ်ထုတစ်ခုသည်အတန်းအစားသို့မဟုတ်ယင်း၏ subclass ၏ဥပမာတစ်ခုရှိမရှိဆုံးဖြတ်ရန်အသုံးပြုသည်။ ဒါဟာအမျိုးအစားရှာဖွေရေးအတွက်အလွန်သင့်လျော်သည်။ သို့သော်သင်ပိုမိုပြောင်းလွယ်ပြင်လွယ်။ ကျယ်ကျယ်ပြန့ ် ပြန့်သောအမျိုးအစားတရားသူကြီးတစ် ဦး ကိုရေးလို လျှင် ,
ပြောင်း လွယ်ပြင်လွယ်အမျိုးအစားတရားသူကြီးတစ် ဦး ကိုမည်သို့ရေးရမည်ကိုခြေလှမ်းတစ်လှမ်းစီကြည့်ရအောင်။
<?php
class Animal {}
class Dog extends Animal {}
$dog = new Dog();
var_dump(is_a($dog, 'Dog')); // bool(true)
var_dump(is_a($dog, 'Animal')); // bool(true)
var_dump(is_a($dog, 'Cat')); // bool(false)
?>
is_a သည်အရာဝတ်ထုတစ်ခုသည်လူတန်းစားအချို့သို့မဟုတ်၎င်း၏ subclass ၏ဥပမာတစ်ခုရှိမရှိဆုံးဖြတ်နိုင်သည်။ ၎င်းသည်ကျွန်ုပ်တို့အတွက်အခြေခံကျရန်အခြေခံဖြစ်သည်။
ကွဲပြားခြားနားသောတရားစီရင်ခြင်းစည်းမျဉ်းများကိုသတ်မှတ်ရန်ပိတ်ခြင်းများကိုကျွန်ုပ်တို့ အသုံးပြု. ၎င်းတို့ကိုစည်းလုံးညီညွတ်သော interface ဖြင့်ခေါ်ပါ။
<?php
$typeCheckers = [
'dog' => function($obj) {
return is_a($obj, 'Dog');
},
'animal' => function($obj) {
return is_a($obj, 'Animal');
},
'string' => function($obj) {
return is_string($obj);
}
];
// အသုံးပြုမှုဥပမာ
function checkType($obj, $type, $checkers) {
if (!isset($checkers[$type])) {
throw new InvalidArgumentException("အမည်မသိအမျိုးအစား: $type");
}
return $checkers[$type]($obj);
}
$dog = new Dog();
var_dump(checkType($dog, 'dog', $typeCheckers)); // bool(true)
var_dump(checkType($dog, 'animal', $typeCheckers)); // bool(true)
var_dump(checkType("hello", 'string', $typeCheckers));// bool(true)
?>
ဤနည်းအားဖြင့်အမျိုးအစားအသစ်ကိုတရားစီရင်ခြင်းကိုထည့်သွင်းခြင်းက $ cyme typeCecheckers ခင်းကျင်းမှုများကိုပိတ်ပစ်ရန်လိုအပ်သည်။
တခါတရံတွင်ကျွန်ုပ်တို့သည်အတန်းအစားအမည်ပေါ်တွင် အခြေခံ. တရားသူကြီးတစ် ဦး ကိုတက်ကြွစွာဖန်တီးရန်လိုအပ်သည်။
<?php
function makeIsATypeChecker(string $className) {
return function($obj) use ($className) {
return is_a($obj, $className);
};
}
$typeCheckers['cat'] = makeIsATypeChecker('Cat');
// စမ်းသပ်မှု
class Cat extends Animal {}
$cat = new Cat();
var_dump(checkType($cat, 'cat', $typeCheckers)); // bool(true)
?>
၎င်းသည်ကျွန်ုပ်တို့၏အမျိုးအစားတရားသူကြီးစနစ်ကို ပိုမို. စွယ်စုံနှင့်ထိန်းသိမ်းရန်လွယ်ကူစေသည်။
တခါတရံအရာဝတ်ထုသည်အချို့သော interface ကိုအကောင်အထည်ဖော်ခြင်းရှိမရှိဆုံးဖြတ်ရန်လိုအပ်သည်ကိုကျွန်ုပ်တို့ဆုံးဖြတ်ရန်လိုအပ်သည်။
<?php
function makeClassOrInterfaceChecker(string $name) {
return function($obj) use ($name) {
return is_a($obj, $name) || in_array($name, class_implements($obj));
};
}
interface Pet {}
class Dog extends Animal implements Pet {}
$typeCheckers['pet'] = makeClassOrInterfaceChecker('Pet');
$dog = new Dog();
var_dump(checkType($dog, 'pet', $typeCheckers)); // bool(true)
?>
ဤနည်းအားဖြင့်အမွေဆက်ဆက်ဆက်ဆံရေးနှင့် interface အကောင်အထည်ဖော်မှုနှစ်ခုလုံးကိုအကောင်အထည်ဖော်ရန်အလွန်ပြောင်းလွယ်ပြင်လွယ်ရှိသည်။
<?php
class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}
interface Pet {}
class DogPet extends Dog implements Pet {}
function checkType($obj, $type, $checkers) {
if (!isset($checkers[$type])) {
throw new InvalidArgumentException("အမည်မသိအမျိုးအစား: $type");
}
return $checkers[$type]($obj);
}
function makeIsATypeChecker(string $className) {
return function($obj) use ($className) {
return is_a($obj, $className);
};
}
function makeClassOrInterfaceChecker(string $name) {
return function($obj) use ($name) {
return is_a($obj, $name) || in_array($name, class_implements($obj));
};
}
$typeCheckers = [
'dog' => makeIsATypeChecker('Dog'),
'animal' => makeIsATypeChecker('Animal'),
'pet' => makeClassOrInterfaceChecker('Pet'),
'string' => function($obj) { return is_string($obj); },
];
// စမ်းသပ်မှု
$dog = new Dog();
$cat = new Cat();
$dogPet = new DogPet();
var_dump(checkType($dog, 'dog', $typeCheckers)); // true
var_dump(checkType($cat, 'animal', $typeCheckers)); // true
var_dump(checkType($dogPet, 'pet', $typeCheckers)); // true
var_dump(checkType("hello", 'string', $typeCheckers));// true
?>
ဤနည်းအားဖြင့်ရှုပ်ထွေးသောစီးပွားရေးလုပ်ငန်းလိုအပ်ချက်အမျိုးမျိုးအတွက်ပြောင်းလွယ်ပြင်လွယ်။ အရွယ်အစားနိုင်သောအမျိုးအစားတရားသူကြီးကိုအလွယ်တကူတည်ဆောက်နိုင်သည်။