TGViewer
| کانال توسعه‌دهندگان PHP | | کانال توسعه‌دهندگان PHP | @developixphp · 1.68K subscribers
Post #35 682
مجیک متدهای __serialize و __unserialize در PHP بخشی از ویژگی‌های مدیریت سریالیزیشن اشیاء هستند. این متدها به شما امکان می‌دهند که کنترل دقیق‌تری بر روند سریالیزیشن و آنسریالیزیشن اشیاء داشته باشید. این کاربرد به ویژه در مواقعی مفید است که شیء شامل داده‌هایی است که نیاز به سریالیزیشن خاصی دارند یا باید از سریالیزیشن برخی داده‌ها جلوگیری شود.

مجیک متد __serialize:
این متد به شما امکان می‌دهد که تعیین کنید کدام داده‌های یک شیء هنگام سریالیزیشن ذخیره شوند. این کار از طریق برگرداندن یک آرایه که شامل نام‌ها و مقادیر متغیرهایی که باید سریالیز شوند، انجام می‌پذیرد.

مثال:
فرض کنید می‌خواهیم کلاس User را داشته باشیم که می‌خواهیم هنگام سریالیزیشن، رمز عبور را حذف کنیم تا در داده‌های سریال شده ذخیره نشود.

class User {
public $username;
private $password;
public $email;

public function __construct($username, $password, $email) {
$this->username = $username;
$this->password = $password;
$this->email = $email;
}

public function __serialize(): array {
return [
'username' => $this->username,
'email' => $this->email
];
}
}

$user = new User('alice', 'secretPassword123', 'alice@example.com');
$serializedUser = serialize($user);

در این مثال، وقتی شیء $user سریالیز می‌شود، متد __serialize فقط username و email را برمی‌گرداند و password سریالیز نمی‌شود.

———

مجیک متد __unserialize:
این متد هنگام آنسریالیزیشن یک شیء فراخوانی می‌شود و به شما امکان می‌دهد که مشخص کنید چگونه داده‌های آنسریالیز شده باید در شیء بازیابی شوند. این متد یک آرایه از داده‌ها را به عنوان ورودی می‌گیرد و شما می‌توانید این داده‌ها را در ویژگی‌های شیء تنظیم کنید.

مثال:
حالا
، برای همان کلاس User، متد __unserialize را پیاده‌سازی می‌کنیم تا هنگام آنسریالیزیشن، رمز عبور را به یک مقدار پیش‌فرض تنظیم کنیم.

class User {
public $username;
private $password;
public $email;

public function __construct($username, $password, $email) {
$this->username = $username;
$this->password = $password;
$this->email = $email;
}

public function __unserialize(array $data): void {
$this->username = $data['username'];
$this->email = $data['email'];

$this->password = 'defaultPassword';
}
}

$serializedUser = 'O:4:"User":2:{s:8:"username";s:5:"alice";s:5:"email";s:17:"alice@example.com";}';
$user = unserialize($serializedUser);

در این مثال، هنگام آنسریالیزیشن، username و email از داده‌های سریال شده بازیابی می‌شوند و password به 'defaultPassword' تنظیم می‌شود. این روش مطمئن می‌کند که هیچ داده حساسی از طریق فرآیند سریالیزیشن و آنسریالیزیشن افشا نشود.

———
تفاوت ها با مجیک متد های __sleep و __wakeup:

__sleep:
مجیک متد __sleep قبل از سریالیزیشن یک شیء فراخوانی می‌شود. هدف از این متد آماده‌سازی شیء برای سریالیزیشن است. __sleep باید یک آرایه از نام‌های خصوصیاتی که قرار است سریالیز شوند را برگرداند. خصوصیاتی که در این آرایه ذکر نشده‌اند در نتیجه سریالیزیشن حذف می‌شوند و حالت فعلی آن‌ها از بین می‌رود.
———

__wakeup:
پس از آنکه شیء آنسریالیز شد، متد __wakeup فراخوانی می‌شود. این متد برای بازیابی منابع یا انجام تنظیمات خاص پس از آنسریالیزیشن استفاده می‌شود، مثلاً بازکردن اتصالات پایگاه داده یا دیگر منابعی که نمی‌توانند مستقیماً سریالیز شوند.
———

__serialize:
این متد جدیدتر و انعطاف‌پذیرتر است و به شما اجازه می‌دهد که دقیقاً مشخص کنید چه داده‌هایی باید به چه شکلی سریالیز شوند. با __serialize، می‌توانید یک آرایه کلید-مقدار برگردانید که دقیقاً نشان‌دهنده‌ی آن چیزی است که می‌خواهید سریالیز شود. این روش فرصت‌های بیشتری برای مدیریت حالت شیء فراهم می‌کند.
———

__unserialize:
هنگام آنسریالیزیشن، __unserialize فراخوانی می‌شود و یک آرایه از داده‌ها را دریافت می‌کند. این متد به شما اجازه می‌دهد که مشخص کنید چگونه این داده‌ها باید در شیء استفاده شوند و به شما امکان می‌دهد تنظیمات لازم را اعمال کنید.
———

مجیک متدهای __serialize و __unserialize به شما کنترل دقیق‌تری بر داده‌هایی که سریالیز و آنسریالیز می‌شوند می‌دهند، در حالی که __sleep و __wakeup بیشتر برای مدیریت ویژگی‌ها و منابع استفاده می‌شوند.

👤 AmirHossein

💎 Channel: @DevelopixPHP
  • ❤ 5
  • 👍 1
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 →