--TEST--
Bug #36424 - Serializable interface breaks object references
--FILE--
<?php

echo "-TEST\n";

class 
implements Serializable {
    function 
serialize() {
        return 
serialize(get_object_vars($this));
    }
    function 
unserialize($s) {
        foreach (
unserialize($s) as $p=>$v) {
            
$this->$p=$v;
        }
    }
}
class 
extends {}
class 
extends {}

$c = new c;
$c->= new a;
$c->a->= new b;
$c->a->b->$c;
$c->a->$c;
$c->a->b->$c->a;
$c->a->$c->a;

$s serialize($c);
printf("%s\n"$s);

$d unserialize($s);

var_dump(
    
$d === $d->a->b->c,
    
$d->a->=== $d->a,
    
$d->a->b->=== $d->a,
    
$d->a->=== $d
);

print_r($d);

echo 
"Done\n";

?>
--EXPECTF--
%aTEST
C:1:"c":108:{a:1:{s:1:"a";C:1:"a":81:{a:3:{s:1:"b";C:1:"b":30:{a:2:{s:1:"c";r:1;s:1:"a";r:3;}}s:1:"c";r:1;s:1:"a";r:3;}}}}
bool(true)
bool(true)
bool(true)
bool(true)
c Object
(
    [a] => a Object
        (
            [b] => b Object
                (
                    [c] => c Object
 *RECURSION*
                    [a] => a Object
 *RECURSION*
                )

            [c] => c Object
 *RECURSION*
            [a] => a Object
 *RECURSION*
        )

)
Done