PHP တွင် Serialize () နှင့် unserialize () သည်အရာဝတ်ထုနှင့်ဒေတာဇွဲရှိခြင်းအတွက်အသုံးပြုသော core functions တစ်စုံဖြစ်သည်။ ၎င်းတို့သည်ရှုပ်ထွေးသောဒေတာတည်ဆောက်ပုံ (ဥပမာအရာဝတ္ထုများ, array စသည်တို့ကဲ့သို့အရာဝတ်ထုများ, သို့သော်သင်သည် PHP ဗားရှင်းတစ်ခုမှ PHP ဗားရှင်းတစ်ခုမှတစ်ခုသို့ (အထူးသဖြင့် PHP 5 မှ PHP 5 မှ PHP 8 မှ PHP 8 မှ PHP 8 မှစသည့်ဗားရှင်းအမြောက်အများကိုဖြတ်သန်းသွားသောအခါ,
အရာဝတ်ထုကို Serialize လုပ်ပြီး target php ပတ်ဝန်းကျင် (ဥပမာ attribute, deletion, namestace ပြောင်းလဲခြင်းစသည်တို့) ကိုပြောင်းလဲလိုက်သည့်အခါ၎င်းသည် attribution အသစ်များကဲ့သို့သော attribute ကိုပျောက်ဆုံးနေခြင်းနှင့် deserialization စဉ်အတွင်းပင်ပစ်ချနိုင်သည်။
$serialized = 'O:8:"UserData":2:{s:4:"name";s:4:"John";s:3:"age";i:30;}';
unserialize($serialized); // လှျင် UserData အတန်းဖွဲ့စည်းပုံပြောင်းလဲသွားပြီ,ဒီမှာကျရှုံးနိုင်တယ်
PHP 7 သည်တင်းကျပ်သောအမျိုးအစားကြေငြာချက်များကိုစတင်မိတ်ဆက်သည်။ ဗားရှင်းအဟောင်းရှိသည့်ဂုဏ်သတ္တိများကိုဒိုင်းနယန်တ္တစုံတခုကိုသတ်မှတ်ထားပါကလူတန်းစားသည်ဗားရှင်းအသစ်တွင်တင်းကြပ်သောဆောက်လုပ်ရေးအမျိုးအစားများကိုအသုံးပြုသည်။
PHP 7.0 ကတည်းက unserialize () function သည်ခွင့် ပြုရန်ခွင့်ပြုထားသော () function ကိုမိတ်ဆက်ပေးသည်။ ၎င်းသည်အန္တရာယ်ရှိသောကုဒ်ဆေးထိုးခြင်းပြ the နာကိုကာကွယ်ပေးသည်။
$data = file_get_contents('https://gitbox.net/data/serialized-user.txt');
$user = unserialize($data, ["allowed_classes" => ["UserData"]]); // ပိုမိုလုံခြုံပေမယ့်တင်းကြပ်စွာ
အမည်မသိ functions (closure) ကို PHP တွင်တိုက်ရိုက် serialized မရနိုင်ပါ ။ အကယ်. သင်၏လျှောက်လွှာသည်ဤ encapsulationulation method များကိုအသုံးပြုပါက PHP ဗားရှင်းများအကြားပြောင်းရွှေ့လာသောအခါ Target version ရှိစာကြည့်တိုက်များနှင့်လိုက်လျောညီထွေဖြစ်အောင်ပြုလုပ်ရန်လိုအပ်သည်။
ထိန်းချုပ်ထားပါကဇွဲသို့မဟုတ်ကွန်ယက်ထုတ်လွှင့်မှုအတွက်အရာဝတ်ထု Serialization ကိုအသုံးပြုရန်မလိုအပ်ပါ။ JSOS ကဲ့သို့သောစံပုံစံများနှင့်ပိုမိုသဟဇာတဖြစ်သည်။
$json = json_encode(['name' => 'John', 'age' => 30]);
$data = json_decode($json, true);
__SEEEP () attribute များသည် serialize များကိုထိန်းချုပ်ရန်သို့မဟုတ် __wakeup () တွင်ဖြေရှင်းရန် serialization အပေါ်သဟဇာတဖြစ်စေရန် classleep ကိုအတန်းထဲတွင် __Leep () ကို သတ်မှတ်နိုင်သည်။
class UserData {
public $name;
public $age;
public function __wakeup() {
if (!isset($this->age)) {
$this->age = 0;
}
}
}
PHP ဗားရှင်းကိုအဆင့်မြှင့်တင်ခြင်းမပြုမီသင် serialized data အားလုံးကိုထုတ်ယူနိုင်ပြီးလက်ရှိ unserialize () ဗားရှင်း ကို သုံး. ၎င်းကိုပြုလုပ်ပြီးပုံစံကို target version နှင့်ကိုက်ညီစေရန်သေချာစေရန်။
အကယ်. သင်သည်အရာဝတ်ထုအပြုအမူ (ဥပမာနည်းများကဲ့သို့) အရာဝတ်ထုအပြုအမူများကိုအားမကိုးပါက unsialize မှယူဆောင်လာသည့်အန္တရာယ်များကိုရှောင်ရှားရန် JSon နှင့်အတူအရာဝတ်ထု၏ဇွဲလိုအပ်ချက်များကိုလုံးဝအစားထိုးနိုင်သည်။
// အခြားနည်းလမ်းများ:အသုံးပြု JSON အသုံးပြုသူအချက်အလက်များကိုသိုလှောင်ပါ
file_put_contents('https://gitbox.net/data/user.json', json_encode($user));
symfony Serialize နှင့် Laravel ၏ serialization encapsulation ကဲ့သို့သောခေတ်သစ်မူဘောင်ကိရိယာများကို အသုံးပြု. ၎င်းတို့သည်များသောအားဖြင့်မူကွဲရွှေ့ပြောင်းခြင်းကိုပိုမိုပြောင်းလွယ်ပြင်လွယ်ပြီးသဟဇာတပြုသောပစ္စည်းများကိုပိုမိုကောင်းမွန်စွာကိုင်တွယ်နိုင်သည်။
မအောင်မြင်သော () သည်မတူညီသော PHP ဗားရှင်းများအကြားဒေတာရွှေ့ပြောင်းမှုတွင်ကွဲပြားသောပြ issues နာအမျိုးမျိုးကိုကြုံတွေ့ရနိုင်သည့်အစွမ်းထက်သော်လည်းမခိုင်မာသေးသောကိရိယာတစ်ခုဖြစ်သည်။ အကောင်းဆုံးနည်းဗျူဟာသည်မှီခိုမှုကိုလျှော့ချရန်, နယ်ပယ်ကိုထိန်းချုပ်ရန်နှင့်ပိုမိုထိန်းချုပ်ထားသောဒေတာဖလှယ်မှုပုံစံကိုရွေးချယ်ရန်ဖြစ်သည်။ အကယ်. အရာဝတ်ထု Serialization လိုအပ်ပါကရှင်းလင်းသောဖွဲ့စည်းတည်ဆောက်ပုံဆိုင်ရာထိန်းချုပ်မှုနှင့်ဗားရှင်းရှာဖွေရေးယန္တရားများဖြင့်လိုက်ပါသင့်သည်။ ဒီလိုမှမဟုတ်ရင်ဒီ "သေးငယ်တဲ့သေးငယ်တဲ့ pits" ကိုလျှို့ဝှက်ထားတဲ့နောက်ကွယ်မှာဝှက်ထားတဲ့ () ကိုအလွယ်တကူလွှင့်ပစ်လိုက်တဲ့ "ထောင်ချောက်" ဖြစ်လာနိုင်တယ်။