Trong lập trình nói chung và lập trình web nói riêng, việc chúng ta phải thao tác xử lý với dữ liệu là một phần quan trọng không thể thiếu. Để đáp ứng nhu cầu trên, hàm serialize và unserialize trong PHP là các hàm được cung cấp để lưu trữ và khôi phục dữ liệu dưới dạng chuỗi. Trong bài viết này, chúng ta hãy cùng tìm hiểu về cách sử dụng hai hàm này để làm có thể làm việc với dữ liệu trong PHP.

1. Hàm serialize trong PHP

Với hàm serialize chúng ta có thể chuyển đổi một biến hoặc đối tượng thành một chuỗi để có thể lưu trữ hoặc là truyền đi. Quá trình này chuyển đổi một dữ liệu thành một chuỗi, nó tuân theo một định dạng để lưu trữ chuỗi này nhằm đảm bảo tính toàn vẹn của dữ liệu. Quá trình này được gọi là "serialize".

$arr = [
    'company' => 'STRINGEE JOIN STOCK COMPANY',
    'email' => '[email protected]',
    'address' => [
        'ha_noi' => '19F, Leadvisors Tower Building, 643 Pham Van Dong Street, Bac Tu Liem',
        'ho_chi_minh' => '5F,  Lottery Tower Building, 77 Tran Nhan Ton Street, 9 Ward, District 5'
    ]
];

echo serialize($arr);
// Kết quả: 
// a:3:{s:7:"company";s:27:"STRINGEE JOIN STOCK COMPANY";
// s:5:"email";s:17:"[email protected]";s:7:"address";a:2:{s:6:
// "ha_noi";s:69:"19F, Leadvisors Tower Building, 643 Pham Van Dong Street, Bac Tu Liem";s:11:
// "ho_chi_minh";s:72:"5F,  Lottery Tower Building, 77 Tran Nhan Ton Street, 9 Ward, District 5";}}

2. Hàm unserialize trong PHP

Như đã nói ở trên, hàm serialize sẽ biến đổi các dữ liệu thành chuỗi và lưu trữ các dữ liệu trên theo định dạng nhất định. Cho nên khi cần sử dụng lại dữ liệu này chúng ta phải khôi phục lại dữ liệu ban đầu. Chúng ta có thể làm việc này với hàm unserialize, quá trình này là quá trình ngược lại quá trình serialize.

// Thông thường chúng ta sẽ lấy biến $serializedStr từ Database hoặc bất cứ đâu được lưu trữ
// Với ví dụ này chúng ta sẽ dùng lại kết quả của ví dụ hàm serialize để unserialize lại dữ liệu ban đầu
$serializedStr = 'a:3:{s:7:"company";s:27:"STRINGEE JOIN STOCK COMPANY";s:5:"email";s:17:"[email protected]";s:7:"address";a:2:{s:6:"ha_noi";s:69:"19F, Leadvisors Tower Building, 643 Pham Van Dong Street, Bac Tu Liem";s:11:"ho_chi_minh";s:72:"5F,  Lottery Tower Building, 77 Tran Nhan Ton Street, 9 Ward, District 5";}}';

$unserializeData = unserialize($serializedStr);

print_r($unserializeData['company']);
// Kết quả: STRINGEE JOIN STOCK COMPANY

Xem thêm bài viết về chủ đề ngôn ngữ lập trình:

- Các hàm thông dụng để làm việc với chuỗi trong PHP 
- Tìm hiểu về hàm preg_match_all trong PHP 
- Php developer là gì? Mô tả công việc, lộ trình thăng tiến và mức thu nhập

3. Sử dụng hàm serialize và unserialize trong thực tế

Như đã nói ở trên thì hàm serializeunserialize có thể áp dụng nhiều hơn trong các tình huống thực tế, trong đó có phát triển ứng dụng web. Sau đây chúng ta sẽ tìm hiểu về cách sử dụng chúng trong thực tế.

Lưu trữ thông tin phiên đăng nhập: Thông thường khi đăng nhập, chúng ta cần lưu trữ thông tin của phiên đăng nhập. Trong mô hình làm việc lớn chúng ta thường cần giao tiếp ở nhiều hệ thống khác nhau, lúc này ta không thể lưu trữ thông tin này trong phiên làm việc được. Chúng ta có thể sử dụng hàm serialize để chuyển đối dữ liệu này thành một chuỗi và lưu nó vào database để tái sử dụng lại dữ liệu này.

$userData = [
    'id' => 1,
    'name' => 'Username'
];

$serializedSession = serialize($userData);
// Ở đây chúng ta có dữ liệu được biến đổi thành chuỗi $serializedSession
// Chúng ta hoàn toàn có thể lưu trữ dữ liệu này vào trong database để xử lý về sau này

Lưu ý: Mặc dù việc lưu trữ các dữ liệu này trông rất thuận tiện, nhưng đồng thời nó cũng có thể có những vấn đề về hiệu suất cũng như bảo mật. Chúng ta luôn phải thật cân nhắc cẩn thận và xem xét dựa trên nhu cầu thực tế để xử lý chúng tối ưu hơn.

4. Lợi ích của hàm serialize và unserialize trong PHP

  • Lưu trữ và khôi phục dữ liệu: Với việc sử dụng hợp lý 2 hàm serializeunserialize chúng ta hoàn toàn có thể lưu trữ và khôi phục dữ liệu một các dễ dàng. Điều này sẽ có tác dụng khi chúng ta cần lưu trữ trạng thái của các phiên làm việc trong thời gian sử dụng ứng dụng web.
  • Dễ dàng truyền dữ liệu: Với các chuỗi string việc truyền dữ liệu qua mạng trở nên dễ dàng hơn hoặc chúng ta cũng có thể lưu trữ các dữ liệu trên trong các định dạng như JSON. Điều này hỗ trợ trong việc giao tiếp giữa các ứng dụng hoặc các máy chủ khác nhau thuận tiện, dễ dàng hơn.
  • Tiết kiệm thời gian và công sức: Vì dữ liệu string được biến đổi thông qua hàm serialize có thể được chuyển đổi lại với hàm unserialize nên chúng ta tiết kiệm được nhiều thời gian cũng như công sức trong việc lưu trữ và khôi phục những dữ liệu phức tạp.

5. Nhược điểm của hàm serialize và unserialize trong PHP

  • Khả năng đọc dữ liệu hạn chế: Vì đối tượng ban đầu đã được chuyển đổi thành chuỗi, chuỗi này không phải là hoàn toàn mã hóa nhưng việc đọc hiểu đối với các chuỗi đã được serialize vẫn có những trở ngại nhất định.
  • Không tương thích phiên bản: Vì dữ liệu của đối tượng đã được serialize và lưu lại nên nếu dữ liệu này quá lâu không được cập nhật thì cũng có thể gây ra các lỗi không ngờ tới cho ứng dụng web.
  • Bảo mật: Vì hàm unserialize chuyển đổi dữ liệu từ chuỗi thành một đối tượng. Nên nếu không được kiểm soát chặt chẽ ở đầu vào của dữ liệu thì dữ liệu này có khả năng sẽ mang theo các mã độc gây nguy hiểm cho hệ thống.
  • Hiệu suất: Các phương thức có sử dụng các cơ chế biến đổi dữ liệu tương tự như serializeunserialize có thể gây tốn thời gian và tài nguyên, đặc biệt với dữ liệu lớn. PHP hay các ngôn ngữ khác vẫn sẽ hỗ trợ chúng ta rất nhiều cách tương tự serializeunserialize .

Tổng kết

Trong PHP, các hàm serializeunserialize vẫn là những công cụ mạnh mẽ cho việc lưu trữ và khôi phục dữ liệu dưới dạng chuỗi. Dựa vào một số ví dụ trên, chúng ta hoàn toàn có thể biến đổi và áp dụng chúng vào các tình huống thực tế, từ lưu trữ phiên đăng nhập đến quản lý đối tượng trong cơ sở dữ liệu. Tuy nhiên như đã nói ở trên, việc sử dụng cẩn thận và hiểu rõ cách hoạt động của chúng là rất quan trọng trong các vấn đề liên quan đến hiệu suất cũng như bảo mật trong việc thao tác và xử lý dữ liệu. Bạn hoàn toàn có thể tìm hiểu thêm các thông tin của hàm serialize và hàm unserialize hoặc có thêm thông tin về các hàm hữu dụng trong PHP tại đây


Stringee Communication APIs là giải pháp cung cấp các tính năng giao tiếp như gọi thoại, gọi video, tin nhắn chat, SMS hay tổng đài CSKH cho phép tích hợp trực tiếp vào ứng dụng/website của doanh nghiệp nhanh chóng. Nhờ đó giúp tiết kiệm đến 80% thời gian và chi phí cho doanh nghiệp bởi thông thường nếu tự phát triển các tính năng này có thể mất từ 1 - 3 năm.

Bộ API giao tiếp của Stringee hiện đang được tin dùng bởi các doanh nghiệp ở mọi quy mô, lĩnh vực ngành nghề như TPBank, VOVBacsi24, VNDirect, Shinhan Finance, Ahamove, Logivan, Homedy,  Adavigo, bTaskee…

Quý bạn đọc quan tâm xin mời đăng ký NHẬN TƯ VẤN TẠI ĐÂY: