Question: I've been working on code that's intended to be used with objects, without really caring what the kind of object is. I wanted to type hint that the method being written expected an object of any type, but ran into some difficulty. 

I tried `function myFunc (object $obj)` and `function myFunc (stdClass $obj)` but both of these generated errors when I tried to pass objects in: 

> 
> Catchable fatal error: Argument 1 passed to MyClass::MyFunc() must be an instance of object, instance of ObjectActualClass given
> 
> 
> 

The same happened with `stdClass` as well

What am I missing? I thought that all classes that didn't explicitly inherit from another class inherited from `stdClass`, meaning that the base class of every class in PHP would be `stdClass`. Is this not the case?

Answer: 
The best way to enforce this would be to create a degenerate interface called `Object`. A degenerate interface means it has no defined methods.

```
interface Object {

   // leave blank

}

```

Then in your base classes, you can implement `Object`.

```
class SomeBase implements Object {

   // your implementation

}

```

You can now call your function as you wanted to

```
function myFunc (Object $obj);

myFunc($someBase);

```

If you pass any object which inherits from your `Object` interface, this type hint will pass. If you pass in an array, int, string etc, the type hint will fail.
You could do something like this:

```
function myFunc ($obj)
{
     if ($obj instanceof stdClass) { .... }
}

```