PHP တွင် JSonserializable interface သည်အရာဝတ်ထုများကို json format ဖြင့်အကောင်အထည်ဖော်ရန်စိတ်ကြိုက် 0 န်ဆောင်မှုကိုအကောင်အထည်ဖော်ရန်အရေးကြီးသောနည်းလမ်းဖြစ်သည်။ သို့သော်လူအများစုကလူအများစုကဖွံ့ဖြိုးမှုစဉ်အတွင်းဤ interface ကိုအကောင်အထည်ဖော်သည့်အခါဤ interface ကိုအကောင်အထည်ဖော်သည့်အခါဘုံပြ problems နာများနှင့်ကြုံတွေ့ရသည်။ ဤဆောင်းပါးသည်ဤသာမန်အမှားများ၏အကြောင်းရင်းများကိုအသေးစိတ်ဖော်ပြပြီးထိရောက်သောပြ troubl နာဖြေရှင်းခြင်းနှင့်ဖြေရှင်းနည်းများကိုပေးလိမ့်မည်။
အကယ်. အတန်းတစ်ခုသည် JSOSSERIERIONIALIFIALIFIAD interface ကိုအကောင်အထည်ဖော်သော်လည်း JSOSSEREERialize () method ကိုသတ်မှတ်ခြင်းမရှိပါက JSonserialize () method ကိုမသတ်မှတ်ပါ။
class User implements JsonSerializable {
// အမှား:undefinedjsonSerializeနည်းလမ်း
}
သို့မဟုတ်:
class User implements JsonSerializable {
// အမှား:နည်းလမ်း签名အမှား
public function jsonSerialize($extraParam) {
return [];
}
}
မှန်ကန်သောလက်မှတ် jsonserialize () နည်းလမ်းကိုအကောင်အထည်ဖော်ရန်သင်သေချာစွာစစ်ဆေးရမည်။
class User implements JsonSerializable {
private $name;
private $email;
public function __construct($name, $email) {
$this->name = $name;
$this->email = $email;
}
public function jsonSerialize(): mixed {
return [
'name' => $this->name,
'email' => $this->email
];
}
}
JSOSSEREERialize () နည်းလမ်း၏ပြန်လည်နေရာချထားခြင်း () နည်းလမ်းသည် JSONS_CENCODED () မှ မှန်ကန်စွာလုပ်ဆောင်နိုင်သည့်အချက်အလက်အမျိုးအစား (ဥပမာ array, objects, Scalars) ဖြစ်ရမည်။ json_encode () အရင်းအမြစ်အမျိုးအစားကိုပြန်ပို့လျှင်သို့မဟုတ်မအောင်မြင်သောမြို့ပတ်ရထားကိုးကားချက်များပါ 0 င်သောအချက်အလက်ဖွဲ့စည်းပုံကိုမအောင်မြင်ပါ။
class Test implements JsonSerializable {
public $fp;
public function __construct() {
$this->fp = fopen("php://memory", "r");
}
public function jsonSerialize(): mixed {
return $this->fp; // အမှား:အရင်းအမြစ်များကို serialized မဖြစ်နိုင်ပါ
}
}
JSON အားဖြင့်မ 0 င်နိုင်သည့်အချက်အလက်အမျိုးအစားများကိုပြန်မသွားပါနှင့်။ ရှုပ်ထွေးသောအဆောက်အအုံများအတွက် serializable လုပ်ရန်သေချာစေသင့်သည်။
public function jsonSerialize(): mixed {
return [
'file_pointer' => 'not serializable'
];
}
ဖွံ့ဖြိုးတိုးတက်မှုလုပ်ငန်းစဉ်အတွင်းအသုံးပြုသူစကားဝှက်များနှင့်တိုကင်များကဲ့သို့သောအထိခိုက်မခံသောသတင်းအချက်အလက်များပြ problem နာကိုလျစ်လျူရှုရန်လွယ်ကူသည်။
public function jsonSerialize(): mixed {
return get_object_vars($this); // အားလုံး attribute တွေပြန်လာလိမ့်မည်,အထိခိုက်မခံသတင်းအချက်အလက်ပါဝင်သည်
}
အထိခိုက်မခံသောအချက်အလက်များကိုမတော်တဆဖော်ထုတ်ခြင်းကိုရှောင်ရှားရန် serialized လုပ်ရန်လိုအပ်သည့်အကဲဖြတ်သည့်အကဲဖြတ်ခြင်းများကိုအတိအလင်းသတ်မှတ်ပါ။
public function jsonSerialize(): mixed {
return [
'username' => $this->username,
// ရည်ရွယ်ချက်ရှိရှိစကားဝှက်လယ်ပြင်ကိုပြန်မပြန်ဘူး
];
}
အချို့သောအခြေအနေများတွင် developer များသည် enializing serializing jsonizing လုပ်သည့်အခါမအောင်မြင်မှုများကိုဖြစ်ပေါ်စေနိုင်သည့်အမည်ဝှက်ထားသောအတန်းများသို့မဟုတ်စတိုးဆိုင်များပိတ်သိမ်းရန်အတွက်တီထွင်သူများသည်ဂုဏ်ပြုမှုများပြုလုပ်ရန်ကြိုးစားလိမ့်မည်။
$object = new class implements JsonSerializable {
public $closure;
public function __construct() {
$this->closure = function () {};
}
public function jsonSerialize(): mixed {
return $this;
}
};
serialized data များ၌ပိတ်ခြင်းမပါ 0 င်ပါနှင့်လိုအပ်ပါက၎င်းတို့ကိုစနစ်တကျအချက်အလက်များကိုပြောင်းလဲပါ။
public function jsonSerialize(): mixed {
return [
'status' => 'closure removed for serialization'
];
}
JSON_LAST_ERROROR_ERROR_MSG () - JSON_CENTODE () ကို JSON_CENDode () ကိုခေါ်ယူပါ။
ခြေလှမ်း - အဆင့်ဆင့်ဖျက်သိမ်းခြင်းနည်းလမ်း - ရှုံးနိမ့်စေသောတိကျသောအချက်အလက်များကိုရှာဖွေရန် JSOSSOLEALIONE () နည်းလမ်းကို item item item ကိုဖယ်ရှားပါ။
breakpoint debugging or logging ကိုသုံးပါ ။
Output ရလဒ်ကိုစစ်ဆေးပါ ။ Https://gitbox.net/json-valider ကဲ့သို့သော JSOR output သည်ပုံစံအမျိုးမျိုးရှိ, မရှိကိုအတည်ပြုရန်အွန်လိုင်းကိရိယာများကိုသုံးပါ။
jsonserializable interface ကိုအကောင်အထည်ဖော်ခြင်းဟာရှုပ်ထွေးမှုမရှိပေမယ့်ရှုပ်ထွေးတဲ့အချက်အလက်ဖွဲ့စည်းပုံ, ပေါ့ဆမှု, အထက်ပါအမှားများနှင့်သူတို့၏ပြ esh နာဖြေရှင်းခြင်းစွမ်းရည်ကိုကျွမ်းကျင်ပိုင်နိုင်စွာတည်ဆောက်ခြင်းသည်အမှန်တကယ်စီမံကိန်းများအတွက် 0 န်ဆောင်မှုဆိုင်ရာပြ problems နာများကိုထိရောက်စွာရှောင်ရှားနိုင်ပြီးကုဒ်အရည်အသွေးနှင့်လုံခြုံရေးကိုတိုးတက်စေသည်။