PHP ရဲ့ချွင်းချက်ကိုင်တွယ်ရေးယန္တရားမှာ ကြိုးစားကြည့်ပါ ... ဖမ်းမိသည် developer များအတွက်အလွန်အသုံးများသောဖွဲ့စည်းပုံဖြစ်သည်။ များသောအားဖြင့်ကျွန်ုပ်တို့သည် ဖမ်းမိသော လုပ်ကွက်များမှတဆင့်ခြွင်းချက်အမျိုးအစားများကိုဖမ်းမိပါမည်။ သို့သော်သင်သည်အချို့သောခြွင်းချက်အမျိုးအစားများကို ဖမ်းယူနိုင်သည့် အရာတစ်ခုတွင်ကိုင်တွယ်လိုပါကသို့မဟုတ်ချွင်းချက်များကိုပင် dynamically တရားသူကြီး ကိုပင်ကိုင်တွယ်လိုပါက Runtime တွင်မတူကွဲပြားစွာအရေးယူခြင်းကိုပြုလုပ်ပါ။
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 သည်တရားစီရင်ခြင်းခံရမည့်ခြွင်းချက်အတန်းအစားအမည်ဖြစ်သည်။
ကျွန်ုပ်တို့တွင်အောက်ပါထုံးစံခြွင်းချက်အတန်းအစားရှိသည်ဆိုပါစို့:
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>
}
}
PHP သည် catch blocks မျိုးစုံကိုထောက်ပံ့သော်လည်း IS_A () ကို အသုံးပြုခြင်းသည်အောက်ပါအားသာချက်များရှိသည်။
Code သည် ပို. ကျစ်လစ်သိပ် သည်းသောအရာ - ချွင်းချက်အားလုံးကိုဖမ်းပြီးတစ် ဦး ကိုတစ် ဦး catch block တွင်ယူနီဖောင်းကိုင်တွယ်ပါ။
Dynamic Exardable - Configuration (သို့) ဒေတာမောင်းနှင်အားဖြင့်ခြွင်းချက်အမျိုးအစားကိုဆုံးဖြတ်နိုင်ပြီး၎င်းကိုကုဒ်ထဲမှချရေးရန်မလိုအပ်ပါ။
သစ်ထုတ်လုပ်ရေး / အသံသွင်းခြင်းစနစ်များအတွက်သင့်တော်သည် ။
သင်၏ပြောင်းလွယ်ပြင်လွယ်များကိုကျောက်ပြားများဖြင့်သင်၏ပြောင်းလွယ်ပြင်လွယ်များကိုလည်းပိုမိုမြှင့်တင်နိုင်သည်။
$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 () သည်ရိုးရှင်းသော်လည်းအစွမ်းထက်သောကိရိယာတစ်ခုဖြစ်သည်။ ၎င်းကိုခြွင်းချက်ကိုင်တွယ်ခြင်းဖြင့်အသုံးပြုခြင်းသည်ရိုးရာ ဖမ်းယူခြင်းက န့်သတ်ချက်များကိုချိုးဖျက်နိုင်ပြီးစည်းလုံးညီညွတ်သောယုတ်ညံ့သောယုတ္တိရှိသည့်အကိုင်းအခက်များရရှိနိုင်ပါသည်။ ၎င်းသည်ကြီးမားသောစီမံကိန်းများအတွက်ကုဒ်ထိန်းသိမ်းနိုင်မှုကိုတိုးတက်ကောင်းမွန်အောင်ပြုလုပ်ခြင်း, ၎င်းကိုကျွမ်းကျင်မှုသည်ယုတ္တိဗေဒကိုပိုမိုအစွမ်းထက်။ ကြော့ရှင်းစွာကိုင်တွယ်လိမ့်မည်။