TGViewer
| AmirHossein | | AmirHossein | @amirhdeveloper · 609 subscribers
Post #51 151
#magic_method #oop #php
مجیک متد های __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 تغییر می‌کند.

این دو مثال کوچکی برای درک این دو متد بود و مطمئنا عملیات های بزرگتری میتوان با آن ها انجام داد.
.
  • 🔥 2
  • ❤ 1
More from @amirhdeveloper
  1. Oct 8, 2026‍ اولین نسخه‌ی «قیچی» منتشر شد! ✂️ راست‌ش چند وقتی هست که پیامک‌های تبلیغاتی و اسپم، شدیدا…
  2. Oct 7, 2026بیاید از قدرت های لاراگرام بگم لاراگرام یک full-stack و ai-ready فریمورک برای توسعه ربات ه…
  3. Sep 30, 2026پکیج LaraGram Sentinel منتشر شد؛ یک پنل مانیتورینگ که هیچ چیزی از زیر دستش در نمی‌ره! تمام…
  4. Sep 23, 2026از امروز با کاهش شدید حاکرها مواجه میشیم
  5. Sep 19, 2026🔴 سوال سوم دو Region دارید: US-East و EU-West. کاربران در هر دو Region هستند. سیستم باید…
  6. Sep 19, 2026🟠 سوال دوم فرض کنید Service A به Service B درخواست می‌زند. B به‌دلیل overload، latency با…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →