__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