1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
--TEST--
Bug #71940 (Unserialize crushes on restore object reference)
--FILE--
<?php
class Identity
{
private $role;
public function __construct($role)
{
$this->role = $role;
}
}
class Entry implements \Serializable
{
private $identity;
public function __construct(Identity $identity)
{
$this->identity = $identity;
}
public function serialize()
{
return serialize(array($this->identity));
}
public function unserialize($serialized)
{
list($this->identity) = unserialize($serialized);
}
}
$identity = new Identity('test');
$identityRef = &$identity;
$entry1 = new Entry($identity);
$entry2 = new Entry($identityRef);
$serialized = serialize([$entry1, $entry2]);
print_r(unserialize($serialized));
?>
--EXPECTF--
Deprecated: %s implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in %s on line %d
Array
(
[0] => Entry Object
(
[identity:Entry:private] => Identity Object
(
[role:Identity:private] => test
)
)
[1] => Entry Object
(
[identity:Entry:private] => Identity Object
(
[role:Identity:private] => test
)
)
)
|