WordPress 教程:在 WordPress 中如何序列化数据

PHP 序列化方法

我们知道数据库只能存储数字,文本和日期这些类型的数据,那么将数组和对象直接存储到数据库最好的方法是序列化,PHP 提供了 serialize() 函数将数组或者对象转成序列化字符串:


$data = array( 'apple', 'banana', 'orange' );
echo serialize( $data );
// 输出结果:a:3:{i:0;s:5:"apple";i:1;s:6:"banana";i:2;s:6:"orange";}

但是 PHP 默认的 serialize()unserialize() 函数有个问题,在序列化的时候,不会判断是否已经序列化过了,或者在序列化数组恢复成数组的时候,也不会判断这是不是序列化数组。

WordPress 如何序列化数据

所以 WordPress 做了一些改进,创造了 maybe_serialize()maybe_unserialize() 这两个函数,用法和 serialize()unserialize() 一致。但是:

  • maybe_serialize() 在进行序列化的时候,如果要序列化的数组或对象已经被序列化过了,就不会再次进行序列化,直接返回已经序列化的字符串。
  • maybe_unserialize() 也一样,如果已经是数组或者对象,直接返回,不再还原!

为了判断是否为已经序列化,所以 WordPress 还有两个函数:

  • is_serialized( $data, $strict = true ):检查 $data 是否已经序列化。
  • is_serialized_string( $data ):检查已经序列化的 $data 是否为字符类型。

所以这两个函数一般这么用:


if ( is_serialized( $data ) ) {
	if ( is_serialized_string( $data ) ) {
		// do something
	}
}

另外,很重要一点,但是 WordPress 已经把很多数据库的操作透明化了,存进去数组,取出来还是数组,非常方便:

比如存到 options 表(update_option),保存数据到 post_meta 表(update_post_meta)都无需再次进行序列化。

同样从 options 表取出数据(get_option),从 post_meta 表取出数据(get_post_meta)也是无需再次反序列化的。

不过,自建表,存数组或者对象到单个字段里面,还是需要序列化的。就要用到这些函数了。

标签:

热门文章