PHP 序列化受保护的 class 字符数错误的变量?
PHP serialize protected class variables with wrong character count?
我正在处理 PHP 5.2.6 中的一个奇怪问题,序列化对象。
显然,PHP 存储受保护的变量成员,其名称前面带有星号。这是正常和正确的,但是,请看下面的示例:
O:18:"object__songChords":1:{s:9:"*chords"}
*chords 不包含 9 个字符,但包含 7 个字符(带有星号)。
自然地,我假设我这边有一些误解,PHP只是计算引号,但是当我将它与存储的其他字符串进行比较时,我发现情况并非如此。
底线是 PHP 无法反序列化这些对象,尽管 classes 没有改变。
Notice: unserialize(): Error at offset 43 of 867 bytes in ...
任何人都可以对此提供一些见解吗?
编辑(提供 class)
class object__songChords {
protected $chords;
protected $lyrics;
}
请注意,为了简单起见,我删除了上面的序列化示例——实际的序列化字符串当然包含这两个属性。
计数未关闭,有两个 [=12=]
个空字符分隔 *
,每边一个:
$o = new object__songChords;
echo addslashes(serialize($o));
产量:
O:18:\"object__songChords\":2:{s:9:\"[=11=]*[=11=]chords\";N;s:9:\"[=11=]*[=11=]lyrics\";N;}
我正在处理 PHP 5.2.6 中的一个奇怪问题,序列化对象。
显然,PHP 存储受保护的变量成员,其名称前面带有星号。这是正常和正确的,但是,请看下面的示例:
O:18:"object__songChords":1:{s:9:"*chords"}
*chords 不包含 9 个字符,但包含 7 个字符(带有星号)。
自然地,我假设我这边有一些误解,PHP只是计算引号,但是当我将它与存储的其他字符串进行比较时,我发现情况并非如此。
底线是 PHP 无法反序列化这些对象,尽管 classes 没有改变。
Notice: unserialize(): Error at offset 43 of 867 bytes in ...
任何人都可以对此提供一些见解吗?
编辑(提供 class)
class object__songChords {
protected $chords;
protected $lyrics;
}
请注意,为了简单起见,我删除了上面的序列化示例——实际的序列化字符串当然包含这两个属性。
计数未关闭,有两个 [=12=]
个空字符分隔 *
,每边一个:
$o = new object__songChords;
echo addslashes(serialize($o));
产量:
O:18:\"object__songChords\":2:{s:9:\"[=11=]*[=11=]chords\";N;s:9:\"[=11=]*[=11=]lyrics\";N;}