If wrong object is given, error points to method definition instead of place where method has been called. Because of that type hinting is not really useful. Instead use:
<?php
function($foo)
{
assert('$foo instanceof ClassRequired');
// ...
}
?>
and use your custom error handler that dumps debug_backtrace() -- this will allow you to find caller that passes wrong object. Works in PHP4 as well.
Reflection