အလိုအလျောက်စမ်းသပ်ခြင်းတွင်လှောင်ပြောင်ခြင်း (လှောင်ပြောင်အရာဝတ်ထု) သည်ကျွန်ုပ်တို့၏အသုံးအများဆုံးစမ်းသပ်နည်းစနစ်များထဲမှတစ်ခုဖြစ်သည်။ ၎င်းသည်ကျွန်ုပ်တို့အားစမ်းသပ်ပစ်မှတ်များကိုခွဲထုတ်ရန်နှင့်ပြင်ပစနစ်များသို့မဟုတ်ရှုပ်ထွေးသောအရာဝတ်ထု interaction များကိုအပေါ်မှီခိုမှုကိုရှောင်ရှားရန်ခွင့်ပြုသည်။ လှောင်ပြောင်မှုကိုအသုံးပြုသောအခါဘုံလိုအပ်ချက်မှာမုတ်ဆိတ်မွေးအရာဝတ်ထုသည်လူတန်းစားသို့မဟုတ် interface တစ်ခု၏ဥပမာတစ်ခုရှိမရှိအတည်ပြုရန်ဖြစ်သည်။ ယခုအချိန်တွင် PHP မှပေးသော is_a () function သည်အလွန်အသုံးဝင်သည်။
is_a () သည် PHP တွင် built-in function တစ်ခုဖြစ်ပြီး၎င်းသည်အရာဝတ်ထုတစ်ခုသည်အချို့သောအတန်းတစ်ခု၏ဥပမာတစ်ခုရှိ, မရှိကိုဆုံးဖြတ်ရန်အသုံးပြုသည်။ ၎င်း၏အခြေခံ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
bool is_a(object|string $object_or_class, string $class, bool $allow_string = false)
$ Office_or_Class : စစ်ဆေးရန်အရာဝတ်ထုသို့မဟုတ်အတန်းအစားအမည်။
$ Class : Class သို့မဟုတ် class ကိုသို့မဟုတ် interface အမည်။
$ Allow_String : string class name ကိုပထမ ဦး ဆုံး parameter သည်အဖြစ်ခွင့်ပြုမထား။ PHP 8.0 နှင့်နောက်ပိုင်းတွင်ပုံမှန်အားဖြင့် မှားယွင်း သည်။
Mock Object အမျိုးအစားကိုဆုံးဖြတ်ရန် IS_A () ကို မည်သို့အသုံးပြုရမည်ကိုသရုပ်ဖော်ရန် PHPunit ကိုဥပမာတစ်ခုအဖြစ်အသုံးပြုကြပါစို့။ Phpunit တွင် ဒေါ်လာ -> Createmock () ဖြင့်ဖန်တီးထားသောအရာဝတ်ထုများကို Simulated ပြုလုပ်သည်, သို့သော်၎င်းတို့သည်မူလအမျိုးအစားအမွေသို့မဟုတ်အကောင်အထည်ဖော်မှုကိုဆက်လက်ထိန်းသိမ်းထားဆဲဖြစ်သည်။
ကျွန်ုပ်တို့တွင်အောက်ပါ interface နှင့်အကောင်အထည်ဖော်မှုရှိသည်ဆိုပါစို့:
interface LoggerInterface {
public function log(string $message);
}
class FileLogger implements LoggerInterface {
public function log(string $message) {
// ဖိုင်များကိုမှတ်တမ်းတင်ရန်ရေးပါ
}
}
ကျွန်ုပ်တို့၏စမ်းသပ်မှုတွင်ကျွန်ုပ်တို့သည်တကယ့် filelogger အစားလှောင်ပြောင်အရာဝတ်ထုကိုအသုံးပြုရန်လိုအပ်သည်။
use PHPUnit\Framework\TestCase;
class SomeTest extends TestCase {
public function testLoggerMockType() {
$mockLogger = $this->createMock(LoggerInterface::class);
$this->assertTrue(is_a($mockLogger, LoggerInterface::class));
$this->assertFalse(is_a($mockLogger, FileLogger::class));
}
}
ဤဥပမာတွင် Mock Object သည်သတ်မှတ်ထားသော interface ကိုအကောင်အထည်ဖော်ရန်ကျွန်ုပ်တို့အတည်ပြုပါသည်။ ၎င်းသည်လှောင်ပြောင်သည့်အရာဝတ်ထုတစ်ခုဖြစ်သော်လည်း IS_A () သည် ၎င်း၏အမျိုးအစားသည်ပစ်မှတ် interface နှင့်ကိုက်ညီမှုရှိမရှိကိုမှန်ကန်စွာဆုံးဖြတ်နိုင်သည်။
PHP တွင်အခြားအလားတူ အော် ပရေတာတစ်ခုရှိပါသည်။ နှစ်ခုအကြားခြားနားချက်မှာ -
is_a () သည်အလုပ်လုပ်နိုင်ပြီးအချို့သောပြောင်းလဲနေသောအခြေအနေများတွင်ပိုမိုပြောင်းလွယ်ပြင်လွယ်ရှိနိုင်သည်။
$className = 'm66.net\\SomeClass';
if (is_a($object, $className)) {
// တိကျသောယုတ္တိဗေဒ execute
}
Instanceof သည် static အခြေအနေများတွင်အသုံးပြုရန်ပိုမိုသင့်တော်သော်လည်းအတန်းအစားအမည်သည်တက်ကြွသော string တစ်ခုဖြစ်သောအခါ is_a () သည်ပိုမိုအဆင်ပြေသည်။
အချို့သောလှောင်ပြောင်သည့်အခြေအနေများတွင်ကွန်တိန်နာတစ်ခုမှလှောင်ပြောင်ရာတွင်လှောင်ပြောင်ရာတွင် 0 န ်ဆောင်မှုကိုထုတ်ယူပါက၎င်းသည်အမျိုးအစားတစ်ခုနှင့်ကိုက်ညီမှုရှိမရှိဆုံးဖြတ်ရန်လိုအပ်သည်။
$service = $container->get('logger_mock'); // မှ m66.net ဝန်ဆောင်မှုကွန်တိန်နာ
if (is_a($service, LoggerInterface::class)) {
$service->log('ဒါကမှတ်တမ်းတစ်ခုပါ');
}
အကယ်. သင်သည်အရာဝတ်ထုတစ်ခုအစား အတန်း အစားအမည်တစ်ခုတွင်ဖြတ်သန်းသွားပါကတတိယ parameter_string_String ကိုသေချာအောင်လုပ်ပါ ။
is_a () သည် အတန်း၏တိကျသောအကောင်အထည်ဖော်မှုအသေးစိတ်အချက်အလက်များမဟုတ်ဘဲအမျိုးအစားဆက်ဆံရေးကိုဆုံးဖြတ်သည်။ ထို့ကြောင့်အရာဝတ်ထုကိုလှောင်ပြောင်ခြင်းအားဖြင့်ဖန်တီးသည် ကို ဂရုမစိုက်ပါ,
အလိုအလျောက်စမ်းသပ်ခြင်းတွင်မုတ်ဆိတ်မွေးအရာဝတ်ထုအမျိုးအစားကိုစီရင်ခြင်းသည်ပြ problems နာများကိုပြ problems နာများနှင့်ပြ problems နာများကိုဖြေရှင်းရန်သေချာစေရန်အရေးကြီးသောခြေလှမ်းတစ်ခုဖြစ်သည်။ is_a () က ဒီအောင်မြင်ရန်ပြောင်းလွယ်ပြင်လွယ်, တက်ကြွသောနည်းလမ်းကိုထောက်ပံ့ပေးသည်။ အထူးသဖြင့် 0 န်ဆောင်မှုကွန်တိန်နာများ, မှီခိုမှု, is_a () နှင့်အတူ () နှင့်ပြောင်ပြောင်တင်းတင်းပိုမိုယုံကြည်စိတ်ချမှုနှင့် ပတ်သက်. လှောင်ပြောင်ခြင်းနှင့်အပြုအမူကိုစစ်ဆေးရန်,