PHP တွင် Serialize () function ကိုအရာဝတ်ထုတစ်ခုသို့မဟုတ် array ကိုသိုလှောင်ခြင်းသို့မဟုတ်ထုတ်လွှင့်ရန်အတွက် string တစ်ခုသို့ပြောင်းလဲရန်အသုံးပြုသည်။ သို့သော်, serialize () function သည်ပြ problems နာများပါ 0 င်သည့်အချက်များပါ 0 င်သည့်ပြ problems နာများနှင့်ကြုံတွေ့ရနိုင်သည် (I.E. အရာဝတ်ထုသည်တစ် ဦး နှင့်တစ် ဦး ရည်ညွှန်းသည်) ရှုပ်ထွေးသောအရာဝတ်ထု Serial Serial Realization ပြ problems နာများကိုပြန်လည်ပြုပြင်ခြင်းနှင့်ဆက်စပ်သောဖြေရှင်းနည်းများကိုဖြေရှင်းရန် Serialize () function ကိုမည်သို့အသုံးပြုရမည်ကိုဤဆောင်းပါးတွင်ဆွေးနွေးပါမည်။
ပြန်လည်ထူထောင်သည့်ရည်ညွှန်းချက်သည်ကိုးကားထားသောအရာဝတ်ထုတစ်ခု၏ဂုဏ်သတ္တိများကိုရည်ညွှန်းသည်။ ဤအခြေအနေသည်ရှုပ်ထွေးသောဒေတာအဆောက်အအုံများတွင်အထူးသဖြင့်သစ်ပင်အဆောက်အအုံများနှင့်ဂရပ်ဖုံတည်ဆောက်ပုံများကဲ့သို့သောဒေတာမော်ဒယ်များတွင်ပိုမိုများပြားသည်။ ဥပမာအားဖြင့်, ကလေးရေးရာအရာဝတ်ထုပါသောမိဘအမျိုးသမီးတစ်မျိုးရှိသည်ဆိုပါစို့။ ကလေးအရာဝတ်ထုတွင်မိဘအရာဝတ်ထုကိုရည်ညွှန်းသည်ဆိုပါစို့။
PHP တွင် Serialize () function သည် PHP variable များကို strings များသို့ပြောင်းလဲရန်စံပြနည်းလမ်းဖြစ်သည်။ သို့သော်အရာဝတ်ထုအတွင်း၌ပြန်လည်ထူထောင်ရေးရည်ညွှန်းချက်များရှိပါက Serialize () သည် အသေးအဖွဲ 0 င်ရောက်မှုသို့ရောက်သွားလိမ့်မည်။ ဒီနေရာတွင်အချက်အလက်များကို recursive ကိုးကားချက်များဖြင့်ပြသသည့်ရိုးရှင်းသောဥပမာတစ်ခုဖြစ်သည်။
class Node {
public $value;
public $next;
public function __construct($value) {
$this->value = $value;
}
}
$node1 = new Node(1);
$node2 = new Node(2);
$node3 = new Node(3);
$node1->next = $node2;
$node2->next = $node3;
$node3->next = $node1; // recursive ကိုးကား
echo serialize($node1);
အထက်ဖော်ပြပါကုဒ်, $ node1 , $ node2 နှင့် $ node3 သည်တစ် ဦး နှင့်တစ် ဦး ရည်ညွှန်းသည်။ Serialize () ဟုခေါ်သောအခါ PHP သည်အဆုံးမဲ့ရလာဒ်ပြည်နယ်သို့ 0 င်ရောက်ပြီးအမှားတစ်ခုဖြစ်ပေါ်စေလိမ့်မည်။
recursive ကိုးကားများ၏ပြ problem နာကိုဖြေရှင်းရန်ကျွန်ုပ်တို့သည်နည်းလမ်းများစွာကိုကျင့်သုံးနိုင်သည်။ အသုံးအများဆုံးနည်းလမ်းနှစ်ခုမှာ serialize () ၏စိတ်ကြိုက်ပရိုဆက်ဆာ () php ၏ __SEEP () နှင့် __wakeup () __wakeup () နှင့် __wakeup () နှင့် __wakeup () နှင့် __wakeup () မှော် () မှော်နည်းလမ်းများကိုအသုံးပြုရမည်။
__SEEEP () နည်းလမ်းသည်အရာဝတ်ထုသည်အရာဝတ်ထုကိုမခေါ်မီအရာဝတ်ထု၏ဂုဏ်သတ္တိများကိုလုပ်ဆောင်နိုင်သည်။ ပြန်လည်ထူထောင်ရေးကိုးကားချက်များကြောင့်ဖြစ်ပေါ်လာသောပြ problems နာများကိုကာကွယ်ရန်ဤနည်းလမ်းများကိုကျွန်ုပ်တို့အသုံးပြုနိုင်သည်။
class Node {
public $value;
public $next;
public function __construct($value) {
$this->value = $value;
}
public function __sleep() {
// ဤတွင်သင်လိုအပ်သော attribute တွေကိုသာ serialize ဖို့ရွေးချယ်နိုင်ပါတယ်,避免recursive ကိုးကား
return ['value'];
}
public function __wakeup() {
// deserialization စဉ်အတွင်းစစ်ဆင်ရေး,အရာဝတ်ထုအကြားဆက်ဆံရေးပြန်လည်တည်ထောင်နိုင်ပါတယ်
}
}
$node1 = new Node(1);
$node2 = new Node(2);
$node3 = new Node(3);
$node1->next = $node2;
$node2->next = $node3;
$node3->next = $node1; // recursive ကိုးကား
echo serialize($node1);
ဤဥပမာတွင် __SEEEP () နည်းလမ်းသည် တန်ဖိုး attribute ကိုသာပြန်လည်ပေးနိုင်သည်။
နောက်ထပ်ချဉ်းကပ်နည်းတစ်ခုမှာ Realursive ကိုးကားချက်များကိုကိုယ်တိုင်ကိုင်တွယ်ရန်ဖြစ်သည်။ ဤအချက်သည် serialization အတွင်းလုပ်ဆောင်နေသောအရာဝတ်ထုများကိုကျော်သွားသည့်အရာဝတ်ထုများကိုကျော်သွားစေရန်သင့်အားခွင့်ပြုထားပြီးအဆုံးမဲ့အားဖြင့်ပြ problem နာကိုရှောင်ရှားရန်ခွင့်ပြုသည်။ ဤနည်းလမ်းကိုရှုပ်ထွေးသောအရာဝတ်ထုအဆောက်အအုံများတွင်ကောင်းစွာအသုံးပြုနိုင်သည်။
class Node {
public $value;
public $next;
public function __construct($value) {
$this->value = $value;
}
}
$visited = [];
function safe_serialize($obj) {
global $visited;
if (in_array(spl_object_hash($obj), $visited)) {
return ''; // မိတ္တူကူးခြင်းမပြုပါနှင့်
}
$visited[] = spl_object_hash($obj);
return serialize($obj);
}
$node1 = new Node(1);
$node2 = new Node(2);
$node3 = new Node(3);
$node1->next = $node2;
$node2->next = $node3;
$node3->next = $node1; // recursive ကိုးကား
echo safe_serialize($node1);
ဤဥပမာတွင်ကျွန်ုပ်တို့သည် serialized object ကို ( spl_object_hash () ) ၏အမှတ်အသားကိုသိမ်းဆည်းရန် 0 င်ရောက်ရန်သွားရောက်လည်ပတ်သည် ။ အရာဝတ်ထုကို serialized ခဲ့လျှင်, ထို့နောက် recursive ကိုးကားများ၏ပြ problem နာကိုရှောင်ရှားရန်အရာဝတ်ထုကိုကျော်သွားပါ။
ရှုပ်ထွေးသောအရာဝတ်ထု Serial Serialization ပြ problems နာများကိုပြန်လည်ထူထောင်ခြင်းဖြင့် PHP ၏ built-in __sleep () __wakeup () မှော်အတတ် () မှော်နည်းလမ်းများမှတဆင့် Serialization ကိုစိတ်ကြိုက်ပြုလုပ်နိုင်သည်။ မတူညီသောလိုအပ်ချက်များနှင့်အရာဝတ်ထုအဆောက်အအုံများအတွက်ကျွန်ုပ်တို့သည် Dead Loops များကိုရှောင်ရှားရန်သို့မဟုတ်ပြန်လည်ထူထောင်သောကိုးကားချက်များကြောင့်ဖြစ်ပေါ်လာသောအလျှံသောအမှားများကိုရှောင်ရှားရန်နည်းလမ်းအမျိုးမျိုးကိုရွေးချယ်နိုင်သည်။