If I were to do this:
$bob = new Bob();
function AnnoyBob( Bob $bob )
{
$bob = NULL;
} // < A
AnnoyBob( $bob );
A: Does $bob now lose its reference to the original pointer and now point to NULL thus having to get collected on the next GC?
$bob = new Bob();
function AnnoyBob( Bob $bob )
{
unset( $bob );
} // < B
AnnoyBob( $bob );
B: Is the $bob pointer now instantly releasing the memory for overwriting?
C: What if you were to pass in the reference here instead: ..( Bob &$bob )

My point being, I see people nullifying pointers not realising that they are now leaving GC to do their dirty work... whereas if you use unset, I am wondering if it explicitly marks it to be available for overwriting then and there (deleted)!