حسن محرمی فرد
4 هفته پیش توسط حسن محرمی فرد مطرح شد
2 پاسخ

کاربرد مهم Serialization در PHP

با سلام و احترام:
من مفاهیم serialization در php رو مطالعه کردم و کاربردهای اون رو تا حدودی دیدم ولی متوجه کاربرد اساسی این مبحث نشدم که اصلا برای چه کاربرد اساسی از این مورد استفاده میشه


ثبت پرسش جدید
رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 1 هفته پیش مطرح شد
0

سلام

باهاش می‌تونی یه کلاس رو توی فایل text ذخیره کنی و دوباره برگردونی و دوباره مثل کلاس باهاش کاری کنی

مثلا بجای این که بیای بگی (نوشتن توی فایل)

$headers = ['id', 'name', 'surname'];
$users = [
    [1, 'reza', 'parsian'],
    [2, 'ali', 'abasi'],
    [3, 'heydar', 'azari']
];

$file = fopen('users.csv', 'w');

fputcsv($file, $headers);

foreach ($users as $user) {
    fputcsv($file, $user);
}

fclose($file);

(خوندن از فایل)

$lines = [];
$lines[] = implode(',', $headers);
foreach ($users as $user) {
    $lines[] = implode(',', $user);
}
$csvString = implode("\n", $lines);
file_put_contents('users.csv', $csvString);

می‌تونی بگی

$headers = ['id', 'name', 'surname'];
$users = [
    [1, 'reza', 'parsian'],
    [2, 'ali', 'abasi'],
    [3, 'heydar', 'azari']
];

$data = [
    'headers' => $headers,
    'users'   => $users
];

$serializedData = serialize($data);
file_put_contents('users_data.txt', $serializedData);

و اینطوری دیتا رو بخونی و مثلا ارایه باهاش دوباره کار کنی

$restoredData = unserialize(file_get_contents('users_data.txt'));
print_r($restoredData);

این هم نمونه کار با کلاسش

<?php

class UsersDB
{
    private $headers;
    private $data;

    public function __construct($headers, $data)
    {
        $this->headers = $headers;
        $this->data = $data;
    }

    public function save($filename)
    {
        file_put_contents($filename, serialize($this));
    }

    public static function load($filename)
    {
        if (!file_exists($filename)) return null;
        return unserialize(file_get_contents($filename));
    }

    public function show()
    {
        echo implode(", ", $this->headers) . "\n";
        foreach ($this->data as $row) {
            echo implode(", ", $row) . "\n";
        }
    }
}

// Usage
$headers = ['id', 'name', 'surname'];
$users = [
    [1, 'reza', 'parsian'],
    [2, 'ali', 'abasi'],
    [3, 'heydar', 'azari']
];

$db = new UsersDB($headers, $users);
$db->save('users.dat');

// Later...
$loaded = UsersDB::load('users.dat');
if ($loaded) $loaded->show();

سینا
تخصص : توسعه دهنده وردپرس
@devwwp 1 هفته پیش مطرح شد
0

سلام
یکی کاربرد های اساسی که داره برای ذخیره سازی دیتا توی دیتابیس هست .
مثلا برای ابجکت ها ،میتونیم داخل دیتابیس ذخیره کنیم، ولی باید serialize بشه

$cart = new Cart();
$cart->items = ['id' => 10, 'qty' => 3];

$stored = serialize($cart);

INSERT INTO carts (data) VALUES ('$stored');

برای گرفتن دیتا هم

$data = unserialize($row["data"]);

-یه کاربرد دیگش هم میتونه ارسال دیتا بین صفحات باشه.
مثلا یه سری اطلاعات داریم که میخواییم از طریق یه فیلد هیدن ارسال کنیم و خب میخواییم کسی هم متوجه نشه

$user = [
  "id" => 5,
  "roles" => ["admin", "editor"],
  "permissions" => ["add", "delete"]
];

$encoded = base64_encode(serialize($user));

توی صفحه بعد هم باید دیتا رو بگیریم

$user = unserialize(base64_decode($_POST["data"]));

کاربرد های دیگه ای هم داره مخصوصا توی cache وqueue وsession ها


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام