PHP Dictionary class accepting objects as keys
First, I do have to say that you look like you are re-inventing the wheel. You can get all of that with SplObjectStorage. Since you're using OutOfBoundsException, you're already using the Spl types.

To your specific questions:


It is hard to think of such a situation, but that doesn't mean that it is inconceivable.
While spl_object_hash is not guaranteed unique, it is highly likely that you will run out of memory far before encountering a hash collision. As the documents state: A string that is unique for each currently existing object and is always the same for each object. It is both faster and cheaper than keeping/maintaining your own internal state.
Yes, the internal keys will not be quite as ordered in the internal arrays, but it will only make a substantial difference if you actually have a problem keeping the two arrays synced &mdash; basically, if you can get #1 to work consistently and without fail, then unset will not matter here.