TGViewer
| کانال توسعه‌دهندگان PHP | | کانال توسعه‌دهندگان PHP | @developixphp · 1.68K subscribers
Post #34 758
مجیک متدهای __sleep و __wakeup در PHP به شما امکان می‌دهند کنترلی بر فرآیند سریالیزه کردن و دسریالیزه کردن یک شیء را داشته باشید.

مجیک متد __sleep :
وقتی یک شیء در PHP سریالیزه می‌شود (برای ذخیره شدن آن در فایل یا ارسال آن از طریق شبکه)، مجیک متد __sleep فراخوانی می‌شود. این مجیک متد امکان می‌دهد تا شما مشخص کنید که کدام ویژگی‌های شیء باید قبل از سریالیزه شدن ذخیره شوند.

مثال:
class MyClass {
public $name;
public $age;
public $city;

public function __construct($name, $age, $city) {
$this->name = $name;
$this->age = $age;
$this->city = $city;
}

public function __sleep() {
return array('name', 'age');
}
}

$obj = new MyClass('John', 30, 'New York');
$data = serialize($obj);
echo $data;
// Output: O:7:"MyClass":2:{s:4:"name";s:4:"John";s:3:"age";i:30;}


در این مثال، ما یک کلاس به نام MyClass داریم که سه ویژگی name، age و city را دارد. ما یک مجیک متد __construct داریم که مقادیر این ویژگی‌ها را تنظیم می‌کند.
سپس، ما مجیک متد __sleep را به کلاس اضافه می‌کنیم. این مجیک متد در زمانی که یک شیء از این کلاس سریالیزه می‌شود، فراخوانی می‌شود و آرایه‌ای از نام‌های ویژگی‌ها را که قبل از سریالیزه شدن باید ذخیره شوند، برمی‌گرداند.
در نهایت، ما یک شیء از این کلاس ایجاد می‌کنیم و آن را سریالیزه می‌کنیم.
وقتی این برنامه اجرا می‌شود، فقط ویژگی‌های name و age از شیء $obj در زمان سریالیزه شدن ذخیره می‌شوند.

———

مجیک متد __wakeup:
وقتی یک شیء سریالیزه شده را می‌خوانید و به شیء تبدیل می‌کنید، مجیک متد __wakeup فراخوانی می‌شود. این مجیک متد به شما اجازه می‌دهد که فرآیند بازیابی داده‌ها پس از دسریالیزه کردن را کنترل کنید.

مثال:
class MyClass {
public $name;
public $age;
public $city;

public function __construct($name, $age, $city) {
$this->name = $name;
$this->age = $age;
$this->city = $city;
}

public function __sleep() {
return array('name', 'age');
}

public function __wakeup() {
$this->city = 'Unknown';
}
}

$data = 'O:7:"MyClass":2:{s:4:"name";s:4:"John";s:3:"age";i:30;}';
$obj = unserialize($data);
var_dump($obj);

/*
Output:

object(MyClass)#1 (3) {
["name"]=>
string(4) "John"
["age"]=>
int(30)
["city"]=>
string(7) "Unknown"
}
*/


در این مثال، ما از همان کلاس MyClass استفاده می‌کنیم. اما در اینجا ما مجیک متد __wakeup را به کلاس اضافه می‌کنیم. این مجیک متد هنگامی که یک شیء از این کلاس دسریالیزه می‌شود، فراخوانی می‌شود و این امکان را به ما می‌دهد که داده‌هایی را پس از دسریالیزه کردن تغییر دهیم.
سپس، ما یک رشته حاوی داده سریالیزه شده را به کلاس MyClass منتقل می‌کنیم و آن را با استفاده از تابع unserialize دسریالیزه می‌کنیم.
وقتی این برنامه اجرا می‌شود، وقتی که $obj دسریالیزه می‌شود، مجیک متد __wakeup فراخوانی می‌شود و مقدار city به "Unknown" تنظیم می‌شود.

به طور خلاصه، مجیک متدهای __sleep و __wakeup در PHP ابزارهایی هستند که به شما امکان می‌دهند کنترلی دقیق بر فرآیند سریالیزه کردن و دسریالیزه کردن یک شیء داشته باشید.

👤 AmirHossein

💎 Channel: @DevelopixPHP
  • 👍 7
  • 🔥 3
More from @developixphp
  1. Sep 26, 2026این کد موقع اجرا چه خروجی‌ای می‌ده و مشکلش کجاست؟ 🔖 #PHP #پی_اچ_پی 👤 Developix 💎 Channe…
  2. Sep 25, 2026🔥 پکیج: قراردادهای ترجمه سیمفونی اگر کد PHP را برای چندزبانگی می‌نویسید، بهتر است منطق بر…
  3. Sep 16, 2026🚀 ‏LaraGram Brain منتشر شد! از این به بعد برای ساخت ربات‌های تلگرام با فریم‌ورک LaraG…
  4. Sep 11, 2026ارسال ایمیل تأیید ثبت‌نام، بازیابی رمز عبور یا نوتیفیکیشن سفارش، تقریباً توی هر پروژه‌ PHP…
  5. Sep 10, 2026برنامه نویسی سوکت در PHP بخش اول عبارت دیگر در ارتباط های غیر سوکت برای ارسال یک پالس از س…
  6. Aug 31, 2026🔥 پکیج: استاندارد PSR-11 برای Container استاندارد PSR-11 فقط یه interface مشترک برای Cont…
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 →