تابع serialize و unserialize در php (پیاچپی)
در این مقاله یک تابع جالب (البته از نظر من) و راهگشا در پی اچ پی را توضیح خواهیم داد که بعضی مواقع بزرگترین مشکلات را به راحتی آب خوردن حل میکند فکر کنید در برنامه نویسی سمت سرور میخواهید یک ساختار پیچیده مثل آرایه یا کلاس را ذخیره و بعد استفاده کنید و یا در طراحی سایت، یک جدول را از مدیر سایت دریافت و در پایگاه داده ذخیره کنید با فرض این که هیچ گونه تغییری در پایگاه داده روی این دادهها انجام نخواهیم داد میتوانیم این داده های پیچیدهی غیر قابل ذخیره و یا با قابلیت ذخیره سازی سخت را به سادگی با استفاده از تابع serialize به رشتههای تبدیل کرده و آنها را در فایل و فیلد جدولمان ذخیره کنیم و در صورت لزوم استفاده از این داده ها آنها را با تابع unserialize به ساختاری اولیهشان تبدیل میکنیم و به راحتی استفاده کنید.
نحوه تعریف و یا به عبارتی امضای تابع serialize به صورت زیر میباشد که ورودی آن هر چیزی میتواند باشد و خروجی آن یک رشته سریال شده با نگارش خاص میباشد که این خروجی سریال شده را میتوانید با تابع unserialize به ساختار اولیه برگردانید و استفاده کیند.
string serialize(mixed $value)
قالب خروجی تابع serialize برای هر یک از انواع دادههای موجود در پی اچ پی به صورت زیر میباشد (یادگیری قالب خروجی مهم نیست اگر در انی مورد کنجکاو نیستید برید اینجا)
ساختار خروجی برای نوع دادهی رشتهای
s:lenght:stirng;
مثال:
$str='hello world';
$serStr=serialize($str);
echo $serStr;
خروزجی:
s:11:"hello world";
ساختار خروجی تابع serialize برای اعدا صحیح
i:value;
مثال
$int=1396;
$serInt=serialize($int);
echo $serInt;
خروجی
i:1396;
ساختار خروجی تابع برای اعداد اعشاری شناور
d:value;
مثال
<?php
$f=1.37;
$serF=serialize($f);
echo $serF;
?>
خروجی
d:1.37;
ساختار تابع serialize برای نوع بولین
b:value;
در این نوع تابع مقادیر متناظر true , false را جایگزین میکند بنابرین مقدار value صفر یا یک میباشد.
مثال:
$bool=true;
$serBool=serialize($bool);
echo $serBool;
خروجی
b:1;
ساختار خروزجی تابع serialize برای NULL
Null
N;
مثال
$n=NULL;
$serN=serialize($n);
echo $serN;
خروجی
N;
ساختار خروجی تابع برای آرایه ها
a:size:{key definition;value definition;(این ساختار برای کلیه اعضای ارایه تکرار میشود)}
توجه کنید که ساختار تعریف کلید و مقدار کلید متناظر از ساختارهای قبلی پیروی میکند.
مثال
<?php
$a=array('a'=>'1','b'=>2,'4'=>'f');
$serA=serialize($a);
echo $serA;
$cars = array("Volvo", "BMW", "Toyota");
echo '<br>';
$serCars=serialize($cars);
echo $serCars;
?>
خروجی
a:3:{s:1:"a";s:1:"1";s:1:"b";i:2;i:4;s:1:"f";}
a:3:{i:0;s:5:"Volvo";i:1;s:3:"BMW";i:2;s:6:"Toyota";}
ساختار خروجی این تابع برای اشیا
Object
O:strlen(object name):object name:object size:{s:strlen(property name):property name:property definition;(repeated per property)}
مثال
<?php
class Car {
function Car() {
$this->model = "VW";
}
}
// create an object
$herbie = new Car();
$serHerbie=serialize($herbie);
echo $serHerbie;
?>
خروجی
O:3:"Car":1:{s:5:"model";s:2:"VW";}
امضای یا نحو فراخوانی تابع unserialixe به صورت زیر میباشد که میتواند مقدار سریال شده با استفاده از تابع serialize را به حالت اولیه برگرداند.
mixed unserialize(string $str)