مجیک متد های
__serialize() و __unserialize() :این متد ها به شما این امکان را میدهند تا روند
serialize و unserialize شدن یک شئ را کنترل کنید.متد
__serialize() : این متد برای تعریف فرمت دادهای serialize شده استفاده میشود. در هنگام استفاده از تابع serialize() فراخوانی میشود و باید یک آرایه از دادهها را برگرداند که به عنوان نمایش serialize شده استفاده میشود. شما میتوانید هر نوع دادهای را در این آرایه شامل کنید، از جمله دادههای عددی، استرینگ، آرایه، آبجکت و ...متد
__unserialize() : این متد برای بازسازی یک شئ از یک نمایش serialize شده استفاده میشود. این تابع در هنگام استفاده از تابع unserialize() فراخوانی میشود و باید دادههای serialize شده را بازیابی کرده و یک شئ جدید را برگرداند.مثال:
class Fruit {
public $name;
public $color;
public function __construct($name, $color) {
$this->name = $name;
$this->color = $color;
}
public function __serialize(): array {
return [
'name' => $this->name,
'color' => $this->color
];
}
public function __unserialize(array $data): void {
$this->name = $data['name'];
$this->color = $data['color'];
}
}
$fruit = new Fruit('banana', 'yellow');
$serialized = serialize($fruit);
echo $serialized . "\n";
// Result:// O:5:"Fruit":2:{s:4:"name";s:6:"banana";s:5:"color";s:6:"yellow";}
$unserialized = unserialize($serialized);// Result:
echo $unserialized->name . "\n";
echo $unserialized->color . "\n";
// banana
// yellow
در مثال بالا در متد
__serialize()مقادیری که باید
serialize شوند بازگردانده می شود و در متد __unserializeداده های
serialize شده دریافت می شود و پس از unserialize مقادیر آن در ویژگی های name و color وارد می شود.فهمیدیم که این دو تابع هم مانند
__sleep() و __wakeup() مربوط به عملیات Serialization هستند اما تفاوت های آنها در چیست؟متد
__serialize() هنگام serialize شدن یک شئ، اجرا می شود.متد
__unserialize() هنگام unserialize شدن یک شئ اجرا می شود.متد
__sleep() قبل از serialize شدن یک شئ، اجرا می شود.متد
__wakeup() بعد از unserialize شدن یک شئ اجرا می شود..