首页 » PHP和MySQL Web开发(原书第4版) » PHP和MySQL Web开发(原书第4版)全文在线阅读

《PHP和MySQL Web开发(原书第4版)》24.3 序列化变量和对象

关灯直达底部

序列化是将可以保存在PHP变量或对象中的任何数据转换成字节流的处理过程,这个字节流可以存储在数据库中,或者通过URL在网页之间传递。如果不使用这个处理过程,很难存储和传递整个数组或对象的内容。

随着session(会话)控制的引入,序列化的作用有了一定的降低,数据的序列化现在可以使用会话控制来实现。事实上,为了将会话变量在HTTP请求之间存储,可以使用会话控制函数来序列化会话变量。

但是,我们可能还希望将PHP数组或对象保存到一个文件或数据库中。如果要这样做,就必须了解如何使用这两个函数:serialize和unserialize。

可以按如下方式调用serialize函数:

$serial_object=serialize($my_object);

如果希望知道序列化都完成了哪些操作,可以通过查看序列化后返回的结果来获知。显而易见,它可以将对象或数组的内容转换为字符串。

例如,我们可以查看对一个简单的employee对象上执行序列化操作的结果。该对象的定义和初始化如下:

class employee

{

var$name;

var$employee_id;

}

$this_emp=new employee;

$this_emp->name='Fred';

$this_emp->employee_id=5324;

如果对其进行序列化操作并显示到浏览器,其输出结果为:

O:8:"employee":2:{s:4:"name";s:4:"Fred";s:11:"employee_id";i:5324;}

可以很容易看出原始对象数据和序列化后的数据之间的关系。

由于序列化后的数据只有文本,你可以将它写到数据库或其他位置。请注意,与往常的操作一样,应该使用mysql_real_escape_string函数对将要写入数据库的数据进行处理,这样可以转义任何特殊字符。注意上述序列化字符串中的引号,我们就知道这是必要的。

要恢复原来的对象,可以调用unserialize函数,如下所示:

$new_object=unserialize($serial_object);

显然,如果在将对象保存到数据库之前调用addslashes函数,那么也需要在反序列化字符串之前调用stripslashes函数。

当序列化类或使用它们作为会话变量时需要注意一点:在PHP能够重新实例化一个类之前,它必须知道类的结构。因此,必须在调用session_start或unserialize函数之前包含该类的定义文件。