0

谁能告诉我s1和s2的区别:

<?php
$o = new ArrayObject();

$s1 = serialize($o);
$s2 = $o->serialize();

var_dump($s1);
var_dump($s2);
?>

上面的示例将输出:

string(45) "C:11:"ArrayObject":21:{x:i:0;a:0:{};m:a:0:{}}"

字符串(21)“x:i:0;a:0:{};m:a:0:{}”

在我的情况下,我想要一个仅序列化其值而不是整个对象的数组对象;就像是

数组(serialized_value_1,serialized_value_2,serialized_value_3,serialized_value_4,serialized_value_5,)

有没有一种简单的方法可以做到这一点,或者我应该在数组中循环并逐个序列化它们???

例如我需要

$arrayObject[0] = serialized_value_0;
$arrayObject[1] = serialized_value_1;
$arrayObject[2] = serialized_value_2;
$arrayObject[3] = serialized_value_3;

而不是 serialize($arrayObject) 它将序列化整个对象......

我想使用序列化,因为它更容易比较不是来自同一实例的 2 个对象......例如:

$p1 = new People('John');
$p2 = new People('John');

所以 $p1 != $p2

但是序列化($p1)== 序列化($p2)

4

1 回答 1

0

您不想序列化两个数组对象,而是想比较它们。那是完全不同的东西。

事实上,你真的不需要做某事。我有这个测试代码为我工作:

$obj1 = new ArrayObject(array('John'));
$obj2 = new ArrayObject(array('John'));

var_dump($obj1 === $obj2); // false - obvious, not the same instance
var_dump($obj1 == $obj2); // true - equality comparison works
var_dump((array) $obj1 === (array) $obj2); // true - casting to array compares ...
var_dump((array) $obj1 == (array) $obj2); // true - ... the array content

只要您ArrayObjectPeople班级中正确扩展,这也将起作用。ArrayObject如果您自己实现了任何数组访问,则必须将所有数组值存储在原始中,即将所有值传递给内部的父函数People

于 2013-09-09T06:48:28.403 回答