PHP တွင် IS_A () function သည်အရာဝတ်ထုတစ်ခုသို့မဟုတ်၎င်း၏ subclass တစ်ခုနှင့်သက်ဆိုင်သည်ကိုဆုံးဖြတ်ရန်လက်တွေ့ကျသောကိရိယာတစ်ခုဖြစ်သည်။ ဤလုပ်ဆောင်ချက်သည်များသောအားဖြင့် type စစ်ဆေးခြင်းအတွက်အထူးသဖြင့် polymorphic intoining, unialize () ) နှင့် deserialization () ၏တရားစီရင်ခြင်းယန္တရား ()) နှင့် deserialization () ၏တရားစီရင်ခြင်းယန္တရားများ () ၏တရားစီရင်ခြင်းယန္တရား () ) နှင့်အသေးစိတ်အရာဝတ်ထုများနှင့်အသေးစိတ်အချက်အလက်များနှင့်အသေးစိတ်အချက်အလက်များနှင့်အသေးစိတ်အချက်အလက်များနှင့်အသေးစိတ်အချက်အလက်များနှင့်အသေးစိတ်အချက်အလက်များနှင့်အသေးစိတ်အချက်အလက်များအရစစ်ဆေးရန်ဖြစ်သည်။ ဤဆောင်းပါးသည်၎င်းကိုတကယ့်ဥပမာများနှင့်နက်နက်နဲနဲဆွေးနွေးပါမည်။
class Animal {}
class Dog extends Animal {}
$dog = new Dog();
var_dump(is_a($dog, 'Dog')); // true
var_dump(is_a($dog, 'Animal')); // true
var_dump(is_a($dog, 'stdClass')); // false
is_a () parameters နှစ်ခုကိုလက်ခံသည်, ပထမကတော့အရာဝတ်ထုတစ်ခုဖြစ်ပြီးဒုတိယကတော့အတန်းအစားနာမည် (string) ပါ။ အရာဝတ်ထုသည်ထိုအတန်းအစားသို့မဟုတ်ယင်း၏ subclass ၏ဥပမာတစ်ခုဖြစ်ပါက မှန်ကန်တဲ့ ပြန်လာ။
PHP တွင် Serialize () သည် အရာဝတ်ထုကို string form ထဲသို့ပြောင်းလဲပြီး unserialize မှတဆင့်ပြန်လည်တည်ဆောက်နိုင်သည်။ ဤတွင်အခြေခံဥပမာများမှာ -
$dog = new Dog();
$serialized = serialize($dog);
$unserialized = unserialize($serialized);
var_dump(is_a($unserialized, 'Dog')); // true
ဤအချိန်တွင်အရာဝတ်ထုကို serialized နှင့် deserialized လုပ်ထားသည့်တိုင်လူတန်းစားအဓိပ္ပာယ်ရှိနေသေးနေသမျှကာလပတ်လုံး is_a () သည် အရာဝတ်ထု၏အတန်းကိုမှန်ကန်စွာဆုံးဖြတ်နိုင်ဆဲဖြစ်သည်။
deserialization မှသော့ချက်သည်အတန်း၏အဓိပ္ပါယ်ဖွင့်ဆိုချက်တွင်တည်ရှိသည်။ deserialization စဉ်အတွင်းအတန်းကိုမရရှိနိုင်ပါက PHP သည်၎င်းကို __php_incte_class သို့ပြန်လည်ထူထောင်လိမ့်မည်။ ယခုအချိန်တွင် is_a () တရားစီရင်ခြင်းသည်မမှန်ကန်ပါ။
$serializedDog = 'O:3:"Dog":0:{}'; // မှ serialize(new Dog())
file_put_contents('dog.txt', $serializedDog);
// အောက်ပါကုဒ်ကို run သောအခါမသတ်မှတ်နိုင်ဟုယူဆပါ Dog အမျိုးအစား
$unserialized = unserialize(file_get_contents('dog.txt'));
var_dump(is_a($unserialized, 'Dog')); // false
var_dump(get_class($unserialized)); // __PHP_Incomplete_Class
IS_A () မပြည့်စုံသောလူတန်းစားအရာဝတ်ထုများကိုအသိအမှတ်မပြုနိုင်ပါ။ ထို့ကြောင့်သက်ဆိုင်ရာအတန်းများကို deserialization မတိုင်မီသတ်မှတ်ထားသောသို့မဟုတ်အလိုအလျောက်ဖွင့်ရန်သေချာစေရန်လိုအပ်သည်။
ခေတ်သစ် PHP စီမံကိန်းများသည် PSR-4 သို့မဟုတ်အလားတူသတ်မှတ်ချက်များကိုအလိုအလျောက်တင်ဆောင်သည့်ယန္တရားများကိုအကောင်အထည်ဖော်ရန်အသုံးပြုသည်။ ဥပမာအားဖြင့်, တေးရေးဆရာမှတဆင့်:
spl_autoload_register(function ($class) {
include 'classes/' . $class . '.php';
});
Ass_a () သို့မဟုတ် unserialize () () () () () () () () () သို့မဟုတ် unserialize () ကိုမကြည့်မီအတန်းဖိုင်ကိုမှန်ကန်စွာဖွင့်ထားသရွေ့, အပြန်အလှန်အားဖြင့်, အကယ်. အတန်းအစားမကိုက်ညီပါက is_a () သည် အစဉ်မပြတ် မှားယွင်းစွာ ပြန်လာလိမ့်မည်။
အချို့သော application များတွင် serialized objects များကို API ဆက်သွယ်ရေးသို့မဟုတ်အလုပ်တန်းစီများစသည့်စနစ်များကိုစနစ်များတွင်ဖြတ်သန်းသွားသည်။ အောက်ပါကုဒ်ကိုသုံးသပ်ကြည့်ပါ။
$dog = new Dog();
$data = serialize($dog);
// ကြောင်းယူဆ API ပေးပို့
$url = 'https://m66.net/api/receive';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POSTFIELDS, ['payload' => $data]);
curl_exec($ch);
လက်ခံသူသည်ခွေးအတန်းအစားတည်ရှိရန်သေချာစေရမည် ။
// လက်ခံသူ Code snippet
$data = $_POST['payload'];
$obj = unserialize($data);
if (is_a($obj, 'Dog')) {
// ယုတ္တိဗေဒအပြောင်းအလဲနဲ့
} else {
// အမှားကိုင်တွယ်
}
အမှားအယွင်းများကိုရှောင်ရှားရန်,
is_a () သည် အရာဝတ်ထု၏လူတန်းစားသို့မဟုတ်ယင်း၏မိဘအတန်းကိုထိရောက်စွာဆုံးဖြတ်နိုင်သည်။
အတန်းများတည်ရှိနေသမျှကာလပတ်လုံးအရာဝတ်ထု Serialization နှင့် deserialization ပြီးနောက်အမျိုးအစားအချက်အလက်များကိုသိမ်းဆည်းထားဆဲဖြစ်သည်။
အကယ်. စာသင်ခန်းဖွင့်ဆိုချက်ပျောက်ဆုံးနေပါက esherialize () သည် __php_inte_class ကို ထုတ်လုပ်လိမ့်မည်။
deserialization မသုံးမီသက်ဆိုင်ရာအတန်းများကိုအမြဲတမ်းဖွင့်ပါ။
0 င်းဒိုးများကို ဖြတ်. သို့မဟုတ်ဆက်လက်တည်ရှိနေသောအရာဝတ်ထုအချက်အလက်များအတွက်လုံခြုံရေးအားနည်းချက်များကိုကာကွယ်ရန်အတန်းများနှင့် deserialization ယုတ္တိဗေဒကိုသေချာစွာစစ်ဆေးသင့်သည်။
is_a () နှင့် Serialization ယန္တရားများကိုမှန်ကန်စွာအသုံးပြုခြင်းသည် Code ၏ကြံ့ခိုင်မှုကိုတိုးတက်စေရုံသာမကစနစ်အတိုင်းအတာနှင့်လုံခြုံရေးအတွက်အာမခံချက်ပေးနိုင်သည်။