Pass func_get_args() to another method or an object?

Well you have a good point, I definitely try not to give the root class too much responsibility, definitely not what almost all subclasses actually use. The Object::hashCode() method for instance, is used by every subclass for equality comparison, so yeah its there for a reason. In my system the standard object serialization is far more common than Json-Serialization, which is why each object has a built-in serialize() method. Sure in minor cases when Json-serialization is needed, I will past the very object to a special Json-Serializer object, such cases are rare though. Maybe constructing argument object is not an appropriate responsibility for the root object, if so I will make some changes.

Anyway, there is a reason why almost all OO languages like Smalltalk, Java, C#, Objective-C, Python and Ruby there is a root object class that is parent to all classes. I dont think theres anything wrong with that, after all all objects/classes share certain behaviors, the bottom-line is to make sure the root class does not do more than what its supposed to, dont you agree?