PHP数组或对象或其他complex data structure不能在running PHP script之外传送或存储或以其他方式使用.如果您想让这样一个复杂的数据 struct 超过脚本的一次运行,那么您需要对其进行serializeit.这仅仅意味着将 struct 放到一个"较低的公分母"中,可以由PHP以外的其他东西处理,如数据库、文本文件、套接字.标准的PHP函数serialize
只有a format来表示这样的东西,它将数据 struct 序列化为PHP特有的字符串表示形式,并且可以使用unserialize
将其反转为PHP对象.不过,还有许多其他格式,如JSON或XML.
以这个常见问题为例:
How do I pass a PHP array to Javascript?
PHP和Javascript只能通过字符串进行通信.可以很容易地将字符串"foo"
传递给Javascript.您可以很容易地将数字1
传递给Javascript.您可以轻松地将布尔值true
和false
传递给Javascript.但是如何将这个数组传递给Javascript呢?
Array ( [1] => elem 1 [2] => elem 2 [3] => elem 3 )
答案是serialization.对于PHP/Javascript,JSON实际上是更好的序列化格式:
{ 1 : 'elem 1', 2 : 'elem 2', 3 : 'elem 3' }
Javascript可以轻松地将其转换为实际的Javascriptarray.
这对于同一数据 struct 的表示同样有效:
a:3:{i:1;s:6:"elem 1";i:2;s:6:"elem 2";i:3;s:7:" elem 3";}
但几乎只有PHP使用它,其他地方几乎不支持这种格式
<array>
<element key='1'>elem 1</element>
<element key='2'>elem 2</element>
<element key='3'>elem 3</element>
</array>
在很多情况下,你需要将complex data structures作为字符串传递.将任意数据 struct 表示为字符串的序列化解决了这一问题.