As Explosion Pills' answer states, unserialize "returns an entirely new value". However, serialization will maintain "relative" references. (Technically, there is no such thing as a relative reference in PHP, but its a good way to conceptualize it.)
If you collect your referenced and referencing variables in an array, serializing the array will save the reference relationship. It won't maintain the original reference, but will automatically recreate it in the context of the new array returned by unserialize.
$vars = array(); $vars['x'] = 'initval'; $vars['xref'] =& $vars['x']; $vars2 = unserialize( serialize( $vars ) ); $vars2['x'] = 'newval'; echo $vars2['xref']; // prints "newval"
It works the same way for internal references in objects.