مجیک متد های
__sleep() و __wakeup() :این دو متد رای کنترل عملیات سریالیزه کردن (
Serialization) و (Unserialization) یک شئ مورد استفاده قرار میگیرند. این متدها به شما امکان میدهند تا در زمان Serialization و Unserialization شئ، عملکرد و رفتار مربوطه را مشخص کنید.متد
__sleep() : این متد در هنگام سریالیزه کردن یک شئ فراخوانی میشود. ممکن است نیاز داشته باشید تا برخی از ویژگیها یا حالتهای شئ را قبل از سریالیزه شدن آن، ذخیره کنید. معمولا در این متد لیستی از نامهای ویژگیهایی که قرار است سریالیزه شوند را برمیگردانید. برای مثال، میتوانید برخی از ویژگیهایی که نباید در هنگام سریالیزه کردن ذخیره شوند را حذف کنید. مثال:class Fruit {
public $name;
public $color;
private $secret;
public function __construct($prop1, $prop2, $secret) {
$this->name = $prop1;
$this->color = $prop2;
$this->secret = $secret;
}
public function __sleep() {
return ['name', 'color'];
}
}
$obj = new Fruit('banana', 'yellow', 'sensitive data');
$data = serialize($obj);
echo $data;
Result:O:5:"Fruit":2:{s:4:"name";s:6:"banana";s:5:"color";s:6:"yellow";}
در این مثال، با استفاده از
__sleep()، فقط ویژگیهای nameو
colorسریالیزه میشوند و ویژگی
secret در فرآیند سریالیزه کردن حذف میشود.متد
__wakeup() : این متد در هنگام Unserialization یک شئ فراخوانی میشود. ممکن است نیاز داشته باشید تا پس از Unserialization شئ و بازیابی ویژگیهای آن، عملیاتی را انجام دهید. به عنوان مثال، میتوانید برخی از پردازشهای خاص را بعد از Unserialization شئ انجام دهید. مثال:class Fruit {
public $name;
public $color;
public function __construct($prop1, $prop2) {
$this->name = $prop1;
$this->color = $prop2;
}
public function __wakeup() {
$this->color = strtoupper($this->color);
}
}
$data = 'O:5:"Fruit":2:{s:4:"name";s:6:"banana";s:5:"color";s:6:"yellow";}';
$obj = unserialize($data);
echo $obj->color;
Result:YELLOW
در این مثال، با استفاده از
__wakeup()، پس از Unserialization شئ، مقدار ویژگی colorبه صورت
Uppercase تغییر میکند.این دو مثال کوچکی برای درک این دو متد بود و مطمئنا عملیات های بزرگتری میتوان با آن ها انجام داد.
.