نزدیکترین معادل فارسی برای واژه Serialize مرتبسازی یا پشت سر هم قرار دادن است. در برنامهنویسی وقتی صحبت از Serialize میکنیم، در واقع منظور ایجاد شکلی قابل ذخیره از یک مقدار است. مقادیری مانند string ها، int ها و سایر دیتا تایپ های ساده به راحتی قابل ذخیره سازی روی مموری، فایل یا جابجایی در سطح شبکه هستند، اما زمانی که به ذخیره یا انتقال یک آبجکت نیاز داریم چطور میتوانیم اینکار را انجام دهیم ؟
اینجاست که Serialize به ما کمک میکند مقادیر را بدون تغییر در نوع و ساختار، ذخیره یا جابجا کنیم.
سریالایز به عمل قرار دادن یک از سری بیت ها در کنار هم، بر اساس قاعدهای مشخص گفته میشود.
منظور از قاعدهای مشخص در واقع فرمتی است که در سریالایز از آن استفاده میشود. JSON، YAML، XML و دیگر فرمت ها میتوانند به عنوان فرمتی برای سریالایز مورد استفاده قرار گیرند.
در PHP فانکشنی به نام `serialize` برای همین منظور وجود دارد :
<?php $serialized = serialize([1, 2, 3, 4, 5]); echo $serialized;
خروجی کد بالا به این صورت خواهد بود :
a:5:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;}
نمونهای از سریالایز یک آبجکت :
<?php class SomeClass { private $somePrivateProperty; public $somePublicProperty; public function somePublicMethod() { // ... } private function somePrivateMethod() { // ... } } $serialized = serialize(new SomeClass); echo $serialized;
خروجی کد بالا به این صورت خواهد بود :
O:9:"SomeClass":2:{s:30:"SomeClasssomePrivateProperty"N;s:18:"somePublicProperty"N;}
همانطور که میبینید فرمت سریالایز در PHP به این صورت است. برای کسب اطلاعات بیشتر در مورد این فرمت، از این پاسخ در استکاُوِرفلو استفاده نمایید.
نحوه Un-Serialize کردن مقدار Serialize شده
همانطور که برای سریالایز، فانکشن `serialize` را داریم، برای بازگرداندن آن فانکشنی به نام `unserialize` وجود دارد.
در مثال پیشین :
print_r(unserialize($serialized));
خروجی کد بالا به این صورت خواهد بود :
SomeClass Object ( [somePrivateProperty:SomeClass:private] => [somePublicProperty] => )
همانطور که واضح است کلاس ما دوباره بازگشته و قابل استفاده است.
اگر از علاقهمندان به فریمورک محبوب لاراول باشید، احتمالا با قابلیت Job/Queue در این فریمورک کار کردهاید. در واقع اتفاقی که در Job های لاراول میافتد این است که تمام کلاس Job ی که نوشتهاید سریالایز میشود و تحت عنوان یک Job در Queue قرار میگیرد. و در هنگام اجرای آن Job مقدار سریالایز شده از دیتابیس خوانده شده، Un-Serialize شده و سپس متد `handle` آن اجرا میشود.
منابع :
https://www.php.net/manual/en/function.serialize.php
https://en.wikipedia.org/wiki/Serialization#Serialization_formats
https://stackoverflow.com/questions/8641889/how-to-use-php-serialize-and-unserialize