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:{}}"

string(21) "x:i:0;a:0:{};m:a:0:{}"

私の場合、オブジェクト全体ではなく値のみがシリアル化された配列オブジェクトが必要です。何かのようなもの

array( serialized_value_1, serialized_value_2, serialized_value_3, serialized_value_4, serialized_value_5, )

これを行う簡単な方法はありますか、それとも配列をループして 1 つずつシリアル化する必要がありますか ???

たとえば、私は必要です

$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

but serialize($p1) == serialize($p2)

4

1 に答える 1

0

2 つの配列オブジェクトをシリアル化するのではなく、それらを比較したい。それはまったく違うものです。

実際、何かをする必要はありません。私はこのテストコードを私のために働いています:

$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

ArrayObjectこれは、クラスでを正しく拡張している限り機能しますPeople。すべての配列値を元の 内に格納する必要がありますArrayObject。つまり、すべての値を内部の親関数に渡す必要があります。配列アクセスのいずれかをPeople自分で実装した場合です。

于 2013-09-09T06:48:28.403 に答える