လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> IS_A () function ကိုအသုံးပြုနည်းကိုခြွင်းချက်အမျိုးအစားကိုဆုံးဖြတ်ရန်မည်သို့အသုံးပြုရမည်နည်း,

IS_A () function ကိုအသုံးပြုနည်းကိုခြွင်းချက်အမျိုးအစားကိုဆုံးဖြတ်ရန်မည်သို့အသုံးပြုရမည်နည်း,

M66 2025-07-07

PHP ရဲ့ချွင်းချက်ကိုင်တွယ်ရေးယန္တရားမှာ ကြိုးစားကြည့်ပါ ... ဖမ်းမိသည် developer များအတွက်အလွန်အသုံးများသောဖွဲ့စည်းပုံဖြစ်သည်။ များသောအားဖြင့်ကျွန်ုပ်တို့သည် ဖမ်းမိသော လုပ်ကွက်များမှတဆင့်ခြွင်းချက်အမျိုးအစားများကိုဖမ်းမိပါမည်။ သို့သော်သင်သည်အချို့သောခြွင်းချက်အမျိုးအစားများကို ဖမ်းယူနိုင်သည့် အရာတစ်ခုတွင်ကိုင်တွယ်လိုပါကသို့မဟုတ်ချွင်းချက်များကိုပင် dynamically တရားသူကြီး ကိုပင်ကိုင်တွယ်လိုပါက Runtime တွင်မတူကွဲပြားစွာအရေးယူခြင်းကိုပြုလုပ်ပါ။

အခြေခံဗဟုသုတ - is_a ၏အခန်းကဏ်။ ()

is_a () function သည်အရာဝတ်ထုတစ်ခုသည်အတန်းတစ်ခု၏ဥပမာတစ်ခုသို့မဟုတ်၎င်းကိုအမွေဆက်ခံနေသည်ကိုဆုံးဖြတ်ရန်အသုံးပြုသည်။ အခြေခံ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -

 bool is_a ( object|string $object_or_class , string $class , bool $allow_string = false )
  • $ Object_or_Class : တရားစီရင်ခြင်းခံရဖို့အရာဝတ်ထုသို့မဟုတ်အတန်းအစားအမည်။

  • $ အတန်း - Target Class Name ကိုဆုံးဖြတ်ရန်။

  • $ Allow_String : အကယ်. မှန်ကန် ပါကပထမ ဦး ဆုံး parameter သည် string တစ်ခုဖြစ်ခွင့်ရရန်ခွင့်ပြုခဲ့သည် (အတန်းအမည်) ။

ခြွင်းချက်ကိုင်တွယ်ခြင်းတွင်ကျွန်ုပ်တို့သည်ပထမ ဦး ဆုံး parameter ကိုဖမ်းမိသောချွင်းချက်အရာဝတ်ထုနှင့်အများအားဖြင့်သတ်မှတ်လေ့ရှိသည်။ ဒုတိယ parameter သည်တရားစီရင်ခြင်းခံရမည့်ခြွင်းချက်အတန်းအစားအမည်ဖြစ်သည်။

ဥပမာ - ခြွင်းချက်အမျိုးအစားကိုဆုံးဖြတ်ရန် is_a () ကို သုံးပါ

ကျွန်ုပ်တို့တွင်အောက်ပါထုံးစံခြွင်းချက်အတန်းအစားရှိသည်ဆိုပါစို့:

 class DatabaseException extends Exception {}
class FileNotFoundException extends Exception {}
class PermissionException extends Exception {}

ထိုအခါကျွန်ုပ်တို့သည် code တွင်ကွဲပြားခြားနားသောခြွင်းချက်များကိုပစ်:

 function riskyOperation($type) {
    switch ($type) {
        case 'db':
            throw new DatabaseException("ဒေတာဘေ့စ်အမှား");
        case 'file':
            throw new FileNotFoundException("ဖိုင်မတွေ့ပါ");
        case 'permission':
            throw new PermissionException("ခွင့်တောင်းမှုငြင်းဆိုခြင်း");
        default:
            throw new Exception("အမည်မသိအမှား");
    }
}

ယခုအခါကွဲပြားခြားနားသောအမျိုးအစားများကိုကိုင်တွယ်ရန် is_a () နှင့်အတူစည်းလုံးသော catch block ကိုမည်သို့အကောင်အထည်ဖော်ရမည်ကိုကြည့်ကြပါစို့။

 try {
    riskyOperation('db'); // သင်ကပြောင်းလဲနိုင်ပါတယ် file、permission သို့မဟုတ်အခြား
} catch (Exception $e) {
    if (is_a($e, 'DatabaseException')) {
        echo "ယပ်ရပ်အနေပ်အမ်းစာကိုကိုင်တွယ်ခြင်း\n";
        // ဒေတာဘေ့စအမှားမှတ်တမ်းသို့ဝင်ရောက်ပါ:<code>https://m66.net/log/db</code>
    } elseif (is_a($e, 'FileNotFoundException')) {
        echo "ဖိုင်မတွေ့ပါ处理逻辑\n";
        // ဖိုင်အကူအညီစာမျက်နှာသို့ redirect:<code>https://m66.net/help/file</code>
    } elseif (is_a($e, 'PermissionException')) {
        echo "ခွင့်ပြုချက်အမှားကိုင်တွယ်ပုံ\n";
        // ခွင့်ပြုချက်လျှောက်ထားရန်အချက်များ:<code>https://m66.net/request/permission</code>
    } else {
        echo "ယုတ္တိဗေဒကိုင်တွယ်သည့်အထွေထွေခြွင်းချက်\n";
        // အထွေထွေအမှားစာရွက်စာတမ်းကိုကြည့်ပါ:<code>https://m66.net/docs/error</code>
    }
}

ဖြစ်ရပ်မှန်အားသာချက် - အဘယ်ကြောင့် ဖမ်းမိသော အရာအစား _a () ကို အဘယ်ကြောင့်အသုံးပြုသနည်း။

PHP သည် catch blocks မျိုးစုံကိုထောက်ပံ့သော်လည်း IS_A () ကို အသုံးပြုခြင်းသည်အောက်ပါအားသာချက်များရှိသည်။

  1. Code သည် ပို. ကျစ်လစ်သိပ် သည်းသောအရာ - ချွင်းချက်အားလုံးကိုဖမ်းပြီးတစ် ဦး ကိုတစ် ဦး catch block တွင်ယူနီဖောင်းကိုင်တွယ်ပါ။

  2. Dynamic Exardable - Configuration (သို့) ဒေတာမောင်းနှင်အားဖြင့်ခြွင်းချက်အမျိုးအစားကိုဆုံးဖြတ်နိုင်ပြီး၎င်းကိုကုဒ်ထဲမှချရေးရန်မလိုအပ်ပါ။

  3. သစ်ထုတ်လုပ်ရေး / အသံသွင်းခြင်းစနစ်များအတွက်သင့်တော်သည်

သိကောင်းစရာများ - ပိုမိုပြောင်းလွယ်ပြင်လွယ်သောအကိုင်းအခက်များအောင်မြင်ရန်လူတန်းစားမြေပုံရေးဆွဲခြင်းဇယားကိုပေါင်းစပ်ပါ

သင်၏ပြောင်းလွယ်ပြင်လွယ်များကိုကျောက်ပြားများဖြင့်သင်၏ပြောင်းလွယ်ပြင်လွယ်များကိုလည်းပိုမိုမြှင့်တင်နိုင်သည်။

 $handlers = [
    'DatabaseException' => function($e) {
        echo "ဒေတာဘေ့စခြွင်းချက်များကိုကိုင်တွယ်ပါ:" . $e->getMessage() . "\n";
    },
    'FileNotFoundException' => function($e) {
        echo "ဖိုင်ခြွင်းချက်များကိုကိုင်တွယ်ခြင်း:" . $e->getMessage() . "\n";
    },
    'PermissionException' => function($e) {
        echo "ခွင့်ပြုချက်ခြွင်းချက်ကိုင်တွယ်:" . $e->getMessage() . "\n";
    },
];

try {
    riskyOperation('file');
} catch (Exception $e) {
    foreach ($handlers as $class => $handler) {
        if (is_a($e, $class)) {
            $handler($e);
            exit;
        }
    }
    echo "ပုံမှန်ခြွင်းချက်ကိုင်တွယ်:" . $e->getMessage() . "\n";
}

ဤနည်းအားဖြင့်အပြောင်းအလဲနဲ့ယုတ္တိဗေဒကိုအမှန်တကယ်လိုအပ်ရာများအရပြောင်းလဲခြင်းကိုပြောင်းလဲခြင်းနှင့်အညီပြုပြင်ပြောင်းလဲနိုင်ပြီး plug-in ဗိသုကာပညာ,

အကျဉ်းချုပ်

is_a () သည်ရိုးရှင်းသော်လည်းအစွမ်းထက်သောကိရိယာတစ်ခုဖြစ်သည်။ ၎င်းကိုခြွင်းချက်ကိုင်တွယ်ခြင်းဖြင့်အသုံးပြုခြင်းသည်ရိုးရာ ဖမ်းယူခြင်းက န့်သတ်ချက်များကိုချိုးဖျက်နိုင်ပြီးစည်းလုံးညီညွတ်သောယုတ်ညံ့သောယုတ္တိရှိသည့်အကိုင်းအခက်များရရှိနိုင်ပါသည်။ ၎င်းသည်ကြီးမားသောစီမံကိန်းများအတွက်ကုဒ်ထိန်းသိမ်းနိုင်မှုကိုတိုးတက်ကောင်းမွန်အောင်ပြုလုပ်ခြင်း, ၎င်းကိုကျွမ်းကျင်မှုသည်ယုတ္တိဗေဒကိုပိုမိုအစွမ်းထက်။ ကြော့ရှင်းစွာကိုင်တွယ်လိမ့်မည်။