PHP ပရိုဂရမ်တွင် Serialize function ကိုအရာဝတ်ထုများသို့မဟုတ် arrays များကိုကြိုးများအဖြစ်ပြောင်းလဲရန်အသုံးပြုသည်။ သို့သော်အရာဝတ်ထုများကို 0 န်ဆောင်မှုပေးသည့်အခါအခြားအရာဝတ်ထုများကိုရည်ညွှန်းသည့်အရာဝတ်ထုတွင် attribute များရှိပြီးဤအရာဝတ်ထုများအကြားအပြန်အလှန်ရည်ညွှန်းကိုးကားသည့်ဆက်နွယ်မှုများရှိလျှင် (ဥပမာအားဖြင့် B နှင့် B တို့ကိုရည်ညွှန်းသည်။
PHP ၏ Serialize function ကိုအသုံးပြုသည့်အခါ Infinite Recursion ၏ထောင်ချောက်ကိုမည်သို့ရှောင်ရှားရမည်ကိုဤဆောင်းပါးတွင်လေ့လာပါမည်။
PHP ရှိ Serialize function သည် PHP တန်ဖိုးများကိုသိမ်းဆည်းထားသည့်သို့မဟုတ်လွှဲပြောင်းနိုင်သောပုံစံသို့ပြောင်းလဲသည်။ များသောအားဖြင့်အရာဝတ်ထုများသို့မဟုတ် arrays ၏ persistent သိုလှောင်မှုအတွက်အသုံးပြုကြသည်။ ဥပမာအားဖြင့်:
<?php
$array = array("name" => "GitBox", "url" => "https://gitbox.net");
$serialized = serialize($array);
echo $serialized;
?>
အရာဝတ်ထုများအကြားမြို့ပတ်ရထားရည်ညွှန်းချက်ရှိသည့်အခါအဆုံးမဲ့လှည့်ကွက်၏ထောင်ချောက်များမှာများသောအားဖြင့်ဖြစ်သည်။ ဥပမာအားဖြင့်:
<?php
class Node {
public $name;
public $child;
public function __construct($name) {
$this->name = $name;
}
public function setChild($child) {
$this->child = $child;
}
}
$node1 = new Node("Node 1");
$node2 = new Node("Node 2");
$node1->setChild($node2);
$node2->setChild($node1);
$serialized = serialize($node1); // ဤသည်အဆုံးမဲ့ရိုးရိုး recursion ဖြစ်ပေါ်လိမ့်မယ်
?>
အထက်ဖော်ပြပါကုဒ်များတွင် $ node1 နှင့် $ node2 သည်တစ် ဦး ကိုတစ် ဦး ရည်ညွှန်းသည်။ Serialize ($ node1) ကိုခေါ်သည့်အခါ PHP သည် Node ၏ ကလေး၏ ပိုင်ဆိုင်မှုကို 0 မ် းနည်းစေမည့် $ Node အမှတ်အသား ကိုစတင် 0 န်ထုတ်ပေးလိမ့်မည်။ ထို့နောက် PHP သည် $ node2 ကို 0 န်ဆောင်မှုပေးမည်ဖြစ်ပြီး၎င်းသည်အဆုံးမဲ့အားဖွင့်လှစ်နိုင်သည့် ဒေါ်လာ node11 သို့ပြန်သွားလိမ့်မည်။
မရေမတွက်နိုင်သောလှည့်စားမှုထောင်ချောက်ထဲမကျမိစေရန် Serialize ကို အသုံးပြုသောအခါအောက်ပါနည်းလမ်းများကိုကျွန်ုပ်တို့ယူနိုင်သည် -
PHP သည် Magic Method __sleep ကို ထောက်ပံ့ပေးသည်။ အကယ်. အရာဝတ်ထု attribute သည် recursion ကိုဖြစ်ပေါ်စေပါကဤ attribute များကိုစစ်ထုတ်ရန် __SLEEP နည်းလမ်းကိုသုံးပါ။
<?php
class Node {
public $name;
public $child;
public function __construct($name) {
$this->name = $name;
}
public function setChild($child) {
$this->child = $child;
}
public function __sleep() {
return ['name']; // သာ serialization $name ဉစ်စာပစ္စည်းများ,မြို့ပတ်ရထားကိုးကားခြင်းကိုရှောင်ပါ
}
}
$node1 = new Node("Node 1");
$node2 = new Node("Node 2");
$node1->setChild($node2);
$node2->setChild($node1);
$serialized = serialize($node1); // ဤနေရာတွင်မည်သည့်အခါသမယထွက်ပေါက်မရှိပါ
echo $serialized;
?>
__Seep တွင် attribute များစာရင်းကိုပြန်ပို့ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည် attribute များသည်မည်သည့် attributees များကို serialize ဖြစ်လိမ့်မည်, ထို့ကြောင့် recursion ကိုရှောင်ရှားနိုင်သည်။
splocbjectstorage သည်အရာဝတ်ထုများကိုသိုလှောင်ရန်အထူးအသုံးပြုသောအတန်းအစားကိုအထူးအသုံးပြုသောအတန်းတစ်ခုဖြစ်ပြီးသိုလှောင်ထားသည့်အခါ Replicate objects ကြောင့်ဖြစ်ပေါ်လာသောပြ problems နာများကိုရှောင်ရှားနိုင်သည်။ Rearursion ပြ problems နာများကိုရှောင်ရှားရန်၎င်းကိုကျွန်ုပ်တို့အသုံးပြုနိုင်သည်။
<?php
class Node {
public $name;
public $child;
public function __construct($name) {
$this->name = $name;
}
public function setChild($child) {
$this->child = $child;
}
}
$node1 = new Node("Node 1");
$node2 = new Node("Node 2");
$node1->setChild($node2);
$node2->setChild($node1);
$storage = new SplObjectStorage();
$storage->attach($node1);
$storage->attach($node2);
$serialized = serialize($storage); // ဤနေရာတွင်မည်သည့်အခါသမယထွက်ပေါက်မရှိပါ
echo $serialized;
?>
splocbjectstorage သည်အရာဝတ်ထုများကိုရည်ညွှန်းသည်။
အချို့သောကိစ္စရပ်များတွင်ကျွန်ုပ်တို့သည် Serial Object ကိုပြန်လည်ထူထောင်သောအခါနောက်ထပ်စစ်ဆေးမှုများပြုလုပ်လိုပေမည်။ PHP သည် __WAKUP မှော်နည်းလမ်းကိုထောက်ပံ့ပေးသည်။
<?php
class Node {
public $name;
public $child;
public function __construct($name) {
$this->name = $name;
}
public function setChild($child) {
$this->child = $child;
}
public function __wakeup() {
if ($this->child === $this) {
$this->child = null; // deserialization စဉ်အတွင်းမြို့ပတ်ရထားကိုးကားတားဆီး
}
}
}
$node1 = new Node("Node 1");
$node2 = new Node("Node 2");
$node1->setChild($node2);
$node2->setChild($node1);
$serialized = serialize($node1);
echo $serialized;
$unserialized = unserialize($serialized); // မြို့ပတ်ရထားရည်ညွှန်းချက်ကိုအလိုအလျှောက်ရှင်းလင်းလိမ့်မည်
?>
__wakeup နည်းလမ်းတွင်ကျွန်ုပ်တို့သည်လှည့်စားခြင်းခံရသောအခါပြန်လည်လှည့်မှုကိုရှောင်ရှားရန် loop ကိုရည်ညွှန်း။ ရှင်းလင်းပြတ်သားစွာရှာဖွေတွေ့ရှိသည်။
ဤနည်းလမ်းများမှတစ်ဆင့် PHP Serialization ကြောင့်ဖြစ်သော PHP Serialization ကြောင့်ဖြစ်ပေါ်လာသောအဆုံးမဲ့အားဖြင့်ရလာဒ်ပြ problems နာများကိုထိရောက်စွာရှောင်ရှားနိုင်သည်။ PHP တွင် Serialize လုပ်ဆောင်ချက်များကိုအသုံးပြုသည့်အခါ Realursive ထောင်ချောက်များကိုမည်သို့ရှောင်ရှားရမည်ကိုပိုမိုနားလည်ရန်ဤဆောင်းပါးသည်သင့်အားပိုမိုနားလည်ရန်ကူညီပေးပါ။ သင့်တွင်မေးခွန်းများရှိပါက ကျေးဇူးပြု. ဆက်လက်ဆွေးနွေးပါ။