作为 PHP 开发人员,我是否有必要了解 serialize() 生成值的可存储表示的方式?
As a PHP developer, is it necessary for me to understand the way serialize() generates the storable representation of a value?
我正在使用 PHP 7.1.12 并且我正在尝试了解 [=40] 中最重要的内置函数之一的功能=] serialize()
我了解到 serialize()
用于生成传递给它的值的可存储表示。
我认为这意味着 serialize()
使用其内部功能将接收到的值转换为某个字符串。我对 serialize()
的看法是否正确?
考虑以下代码:
<?php
$a = [];
$a[] = $a;
echo "\na: ".serialize($a);
$b = [];
$b[] =& $b;
echo "\nb: ".serialize($b);
输出:
a: a:1:{i:0;a:0:{}}
b: a:1:{i:0;a:1:{i:0;R:2;}}
在输出中,我无法理解字母 i、a、R 从哪里进入输出。另外,我无法理解 serialize()
是如何形成这个输出的
所以,我的问题是;作为一个 PHP 开发者,我是否有必要理解上面的输出,或者我应该直接使用这个输出而不去深入了解它的细节?
请指导我这方面的知识。
以下是对这些字符含义的一般解释。
字符串
s:size:value;
整数
i:value;
布尔值
b:value; (store '1' or '0')
空
N;
数组
a:size:{key definition;value definition;(repeated per element)}
对象
O:strlen(object name):object name:object size:{s:strlen(property name):property name:property definition;(repeated per property)}
我们真的没有必要知道,PHP是如何序列化的,但是如果你很好奇,上面的解释会帮助你理解它是有逻辑的。希望对您有所帮助。
PHP的序列化格式的另一个特点是它会适当地保留引用:这里重要的部分是R:2;元素。它的意思是“参考第二个值。
由于 PHP 中的对象表现出类似引用的行为,序列化还确保出现两次的同一对象在反序列化时确实是同一个对象:
$b = [];
$b[] =& $b;
echo "\nb: ".serialize($b);
output:b: a:1:{i:0;a:1:{i:0;R:2;}}
整个数组是第一个值,第一个索引是第二个值,所以引用的就是这个。
我正在使用 PHP 7.1.12 并且我正在尝试了解 [=40] 中最重要的内置函数之一的功能=] serialize()
我了解到 serialize()
用于生成传递给它的值的可存储表示。
我认为这意味着 serialize()
使用其内部功能将接收到的值转换为某个字符串。我对 serialize()
的看法是否正确?
考虑以下代码:
<?php
$a = [];
$a[] = $a;
echo "\na: ".serialize($a);
$b = [];
$b[] =& $b;
echo "\nb: ".serialize($b);
输出:
a: a:1:{i:0;a:0:{}}
b: a:1:{i:0;a:1:{i:0;R:2;}}
在输出中,我无法理解字母 i、a、R 从哪里进入输出。另外,我无法理解 serialize()
所以,我的问题是;作为一个 PHP 开发者,我是否有必要理解上面的输出,或者我应该直接使用这个输出而不去深入了解它的细节?
请指导我这方面的知识。
以下是对这些字符含义的一般解释。
字符串
s:size:value;
整数
i:value;
布尔值
b:value; (store '1' or '0')
空
N;
数组
a:size:{key definition;value definition;(repeated per element)}
对象
O:strlen(object name):object name:object size:{s:strlen(property name):property name:property definition;(repeated per property)}
我们真的没有必要知道,PHP是如何序列化的,但是如果你很好奇,上面的解释会帮助你理解它是有逻辑的。希望对您有所帮助。
PHP的序列化格式的另一个特点是它会适当地保留引用:这里重要的部分是R:2;元素。它的意思是“参考第二个值。 由于 PHP 中的对象表现出类似引用的行为,序列化还确保出现两次的同一对象在反序列化时确实是同一个对象:
$b = [];
$b[] =& $b;
echo "\nb: ".serialize($b);
output:b: a:1:{i:0;a:1:{i:0;R:2;}}
整个数组是第一个值,第一个索引是第二个值,所以引用的就是这个。