PHP的serialize序列化数据与JSON格式化数据的例子

澳门新葡亰娱乐在线 1

本文由码农网 –
小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划澳门新葡亰娱乐在线,!

PHP的serialize是将变量序列化,返回一个具有变量类型和结构的字符串表达式,而JSON则是一种更轻、更友好的用于接口(AJAX、REST等)数据交换的格式。
其实两者都是以一种字符串的方式来体现一种数据结构。那么他们之间又有什么区别呢?

本文主要总结了10个PHP特性,这些PHP特性对于PHP开发者来说都是应该学习和使用的,译文如下:

serialize序列化

澳门新葡亰娱乐在线 1

我们在一些老的WEB系统中可能会看到在数据库或在文本文件中存储着一大串貌似有着特殊含义的字符串文本内容。我们仔细看会发现它具有数据类型和结构等信息,但是它并不容易人工阅读,它只适合PHP程序读取。PHP的serialize将数组进行了序列化并存储。我们假设有这样一个数组:
 
$arr = array(
    “0” => array(
        “gameName” => “德乙”,
        “homeName” => “比勒费尔德”,
        “guestName” => “不伦瑞克”,
        “endTime” => “2015-08-21”
    ),
    “1” => array(
        “gameName” => “英超”,
        “homeName” => “水晶宫”,
        “guestName” => “阿斯顿维拉”,
        “endTime” => “2015-08-22”
    )
);

1)标量类型声明(PHP7)

PHP是一种松散类型的编程语言,因此没有提供任何指定输入参数类型和返回值类型的方法。
PHP7通过以下语法改变了这个现象:

function add(int $x, int $y) : int
{
    return $x + $y;
}

echo add(1, 2);

有效类型为:类/接口名称,self,array(数组),callable(回调类型),bool(布尔型),float(浮点型),int(整型)和string(字符串)。

我们要将这个数组内容存储在数据库或者文本文件中,以便其他地方读取。
 
$serialize = serialize($arr);
echo $serialize;

2)?? — 空接合操作符(PHP7)

空接合操作符虽然小,但非常好用,是PHP7中新增加的。?? —
只要操作符的左边存在且不为空,就返回左边,否则就返回操作符的右边:

//$a is not defined
$b = NULL;
$c = "abc123";

echo($a ?? $b ?? $c);

//Result: abc123

我们使用PHP的serialize将数组进行序列化,输出以下结果:
 
a:2:{i:0;a:4:{s:8:”gameName”;s:6:”德乙”;s:8:”homeName”;s:15:”比勒费尔德”;s:9:”guestName”;s:12:”不伦瑞克”;s:7:”endTime”;s:10:”2015-08-21″;}i:1;a:4:{s:8:”gameName”;s:6:”英超”;s:8:”homeName”;s:9:”水晶宫”;s:9:”guestName”;s:15:”阿斯顿维拉”;s:7:”endTime”;s:10:”2015-08-22″;}}

3)匿名类(PHP7)

PHP7中还有一个新增的也很不错,那就是匿名类。有时候,我们只是没有必要创建一个命名的类,因为它的名字会导致当前命名空间的膨胀。语法非常简单:

echo (new class() {
    public function myMethod() {
      return "Hello!";
    }
})->myMethod();

//Result: Hello!

以上输出的结果看上去比较复杂,其实也很简单,它说明的就是一些数据类型和结构。
a:2说明这是个有两个元素的数组(array);
i:0指序列索引;
a:4指有4个字段
s:8:”gameName”说明这是有8个字符的字符串(string)
实际开发中我们只将序列化后的数据进行存储,并不要去关心存储的格式和以及字段意思。如果要将序列化后的数据恢复成数组,则使用unserialize()函数即可。
 
print_r(unserialize($serialize));

4)Reflection

Reflection是一个用来获取有关运行时代码信息的强大框架。让你可以对类、接口、函数、方法和扩展执行反向工程,以构建映射引擎,IoC容器或文档框架等等。

下面是一个获取匿名类所有方法的简单例子:

$class = new ReflectionClass(new class() {
    public function getText() {
        return "Hello from anonymous class";
    }
});
$methods = $class->getMethods();
var_dump($methods);

更多信息请看这里:

以上代码可以打印出数组。
JSON数据解析
我们知道,PHP操作JSON可以使用json_encode()和json_decode()两个函数。json_encode()可以将数组转换成json格式的文本数据,它方便存储和读取,而json_decode()可以直接将json数据转换成数组,方便调用。
 
$jsonencode = json_encode($arr);
echo $jsonencode;
输出:
 
[{“gameName”:”u5fb7u4e59″,”homeName”:”u6bd4u52d2u8d39u5c14u5fb7″,”guestName”:”u4e0du4f26u745eu514b”,”endTime”:”2015-08-21″},{“gameName”:”u82f1u8d85″,”homeName”:”u6c34u6676u5bab”,”guestName”:”u963fu65afu987fu7ef4u62c9″,”endTime”:”2015-08-22″}]

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图