The object type hint accepts any object and nothing else

A method that genuinely accepts any object had no way to say so — mixed is a docblock, and leaving the hint off allows a string through as well. 7.2 adds object, which is narrower than no hint and wider than a class name.

public function serialise(object $subject): string
{
    return json_encode(get_object_vars($subject));
}

$s->serialise(new Order());     // fine
$s->serialise((object) ['a' => 1]);  // fine — stdClass is an object
$s->serialise(['a' => 1]);     // TypeError

It is genuinely useful in about three places: serialisers, containers and anything that reflects. Everywhere else it is a sign the parameter wants an interface instead, and reaching for it too readily produces code that is typed without being checked. Note that it does not accept a closure any differently from anything else — Closure is an object, which occasionally surprises people writing callable-adjacent APIs.