首页 小组 问答 话题 好文 素材 用户 唠叨 我的社区

[函数]WordPress内置的序列化处理相关函数大全

九秘Lv.1种子选手
2024-10-04 02:18:48
0
26

序列化处理是WordPress的强项,比如在使用update_option的时候,可以把字符串,数组,或者对象直接存进去,WordPress会自动对非标量进行序列化处理,需要用到的时候,只需要使用get_option函数取出数据即可,原本是数组,取出来还是数组,原来是对象,取出来依然是对象,非常方便。

WordPress是怎么做到的呢?这个就是WordPress自己定义了几个序列化处理的相关函数把序列化处理过程做的更简单:

maybe_unserialize和maybe_serialize函数

首先WordPress扩展了PHP原生的unserializeserialize函数,定义了maybe_unserializemaybe_serialize函数。

maybe_unserialize( $string );
maybe_serialize( $data );

maybe_unserialize是WordPress提供的反序列化函数,官方的解释是:Unserialize value only if it was serialized.相比PHP的unserialize函数,它会首先会检测传递进来的字符串是不是序列化之后的字符串,是的话,它才使用PHP的unserialize函数进行反序列化,如果不是,则直接返回。所以它的名字会有个maybe

maybe_serialize是WordPress的序列化函数,如果参数$data是普通字符串,则直接返回,如果$data是对象或者数组,则使用PHPserialize函数对齐进行序列化。

特别需要注意的是,如果$data是已经序列化的字符串,函数还会对其再进行一次序列化操作。

下面的例子比较全面解释其用法:

// 字符串不做任何处理,直接返回。
$data = 'Hello World!';
echo maybe_serialize( $data );
// Hello World!

// ***,浮点型,和布尔型数据也是不做处理,直接返回。
$data = 55;
echo maybe_serialize( $data );
// 55

$data = 4.560
echo maybe_serialize( $data );
// 4.560

$data = true;
$data = maybe_serialize( $data );
// $data = true;

$data = null;
$data = maybe_serialize( $data );
// $data = null

// 对象和数组会被转换成序列化数据
$data = array( 1 => 'Hello World!', 'foo' => 'bar' );
echo maybe_serialize( $data );
// a:2:{i:1;s:12:"Hello World!";s:3:"foo";s:3:"bar";}

// 已经序列化的字符串,会被再次序列化
$data = 'a:2:{i:1;s:12:"Hello World!";s:3:"foo";s:3:"bar";}';
echo maybe_serialize( $data );
// s:50:"a:2:{i:1;s:12:"Hello World!";s:3:"foo";s:3:"bar";}";

is_serialized和is_serialized_string函数

前面提到WordPress会判断字符串是不是序列化的字符串,这个是怎么实现的呢?

WordPress提供了is_serializedis_serialized_string这两个函数用来检测当前字符串是不是序列化字符串。

is_serialized( $data );

is_serialized_string( $data );

简单说:is_serialized用法更广泛一点,无论数组,对象,字符串被序列化之后的字符串,它判断为true,而is_serialized_string只有字符串被序列化之后,才判断为true。下面的例子也非常全面的区分两者的区别:

var_dump( is_serialized( serialize(NULL) ) );		// true
var_dump( is_serialized_string( serialize(NULL) ) );	// false

var_dump( is_serialized( serialize(array(1,2,3)) ) );		// true
var_dump( is_serialized_string( serialize(array(1,2,3)) ) );	// false

var_dump( is_serialized( serialize(123) ) );		// true
var_dump( is_serialized_string( serialize(123) ) );	// false

var_dump( is_serialized( serialize(123) ) );		// true
var_dump( is_serialized_string( serialize(123) ) );	// false
九秘
九秘

19 天前

签名 : 我常驻在>https://www.huaqu.club/ask   26       0
评论
站长交流