PHP Object Serialization

Serialization là một cách hữu hiệu để lưu trữ dữ một giá trị nào đó ví dụ: một mảng, một đối tượng. Trong rất nhiều trường hợp, bạn cần đến serialization, cụ thể nhất là back-end caching. Bạn có thể cache lại một biến, tất nhiên, là giá trị của nó. Sau đó load lên, và sử dụng.

Ở đây nói đến việc serialize một đối tượng (object).

Một điều cần lưu ý là các resource như fopen resource, database connection sẽ không thể giữ được khi được unserialize.

Trong PHP5, nếu class của bạn có chứa các resource như thế, bạn có thể tái thiết lập lại chúng sau khi unserialize trong method __wakeup hoặc close chúng trước khi serialize bằng method __sleep!

Đây là các “magic methods” sẽ được gọi tự động khi bạn serialize hoặc unserialize một object nếu class mà object đó thuộc về có định nghĩa chúng!

Tương tự, nếu bạn muốn khi chỉ thực hiện serialization đối với một phần nào đó của object thôi thì bạn có thể định nghĩa class đó implement một interface chuẩn có tên là Serializable. Interface này có định nghĩa 2 method là serialize và unserialize. Object thuộc class thừa kế interface trên sẽ gọi tự động 2 method đó khi bạn dùng các api serialize() và unserialize() đối với nó!

Bạn có thể xem một bài tutorial về Serializable tại link này: http://wiki.cc/php/Serializable

Xem ví dụ dưới đây về object serialization trong PHP:

[php]class Test_Serialization
{
private $_data; public function __construct($data)
{
$this->_data = $data;
}
public function getData()
{
return $this->_data;
}
}
// new instance
$test = new Test_Serialization(’Truly Madly Deeply’);
// serialize $test
$serialized = serialize($test);
$fp = fopen(’objects_cache/test.ser’, ‘w’);
fwrite($fp, $serialized);
// get file content
$unserialize = file_get_contents(’objects_cache/test.ser’);
$test = unserialize($unserialized);
echo $test->getData();
// Truly Madly Deeply[/php]

Chúc bạn may mắn


About this entry