сериализовать значения php ArrayObject

Может ли кто-нибудь сказать мне разницу между s1 и s2:

<?php
$o = new ArrayObject();

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

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

Приведенный выше пример выведет:

строка (45) "C:11:"ArrayObject":21:{x:i:0;a:0:{};m:a:0:{}}"

строка (21) "x:i:0;a:0:{};m:a:0:{}"

В моем случае я хочу объект массива, в котором сериализованы только его значения, а не весь объект; что-то вроде

массив (сериализованное_значение_1, сериализованное_значение_2, сериализованное_значение_3, сериализованное_значение_4, сериализованное_значение_5,)

есть ли простой способ сделать это, или я должен зациклить массив и сериализовать их 1 на 1 ???

например мне нужно

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

а не сериализовать ($arrayObject), который будет сериализовать весь объект...

я хочу использовать сериализацию, потому что проще сравнить 2 объекта, которые не относятся к одному и тому же экземпляру... пример:

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

so $p1 != $p2

но сериализовать ($ p1) == сериализовать ($ p2)


person user2707590    schedule 09.09.2013    source источник


Ответы (1)


Вы не хотите сериализовать два объекта массива, вы хотите их сравнить. Это нечто совершенно другое.

А на самом деле ничего делать не надо. У меня работает этот тестовый код:

$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 самостоятельно.

person Sven    schedule 09.09.2013
comment
я думаю, вы не поняли мою точку зрения.. мне действительно нужен объект-массив, но с его сериализованными значениями, а не весь объект целиком... например, мне нужно $arrayObject[0] = serialized_value_0; $arrayObject[1] = сериализованное_значение_1; $arrayObject[2] = сериализованное_значение_2; $arrayObject[3] = serialized_value_3; а не сериализовать ($arrayObject), который будет сериализовать весь объект - person user2707590; 09.09.2013
comment
Ваш фрагмент кода не устанавливает значения в объект массива, поэтому он не демонстрирует, чего вы действительно хотите. Пожалуйста, обновите свой вопрос соответствующим примером того, что вы делаете и что вы ожидаете получить. - person Sven; 09.09.2013
comment
У вас есть новый ответ. Это помогает? - person Sven; 09.09.2013