PHP5 also provides the [man]clone[/man] operator; which creates a new object, duplicating the state of the existing object, that can be manipulated independently of the original. So passing in a clone in a sense "snaps" the reference.
Note that the clone is only a shallow copy: if the original has (a reference to) an object as one of its properties, the clone will typically have a reference to the same object.
$obj = (object)array('foo'=>42);
$t = (object)array('bar'=>$obj);
var_dump($t);
$b = clone $t;
$b->bar->foo = 17;
var_dump($t);
$b->bar = (object)array('foo'=>'Fnord');
var_dump($t);
To be honest, though, I don't find cloning that useful; can't remember the last time I actually used it, in fact. Now that I think about it, some OO languages don't even provide cloning - C#, for example. They recognise that "cloning" is really a matter of constructing a new object from an existing one, and so expect you to write a constructor to do the job.