IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

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

    Denis发表于 2017-03-13 15:20:02
    love 0

    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)也是无需再次反序列化的。

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

    © 我爱水煮鱼 / RSS 订阅 / 长期承接 WordPress 项目

    如果本文对你有帮助,你可以扫描下面的二维码打赏:
    打赏 Denis



沪ICP备19023445号-2号
友情链接