public static function merge($obj, $obj2)
    {
        if (!is_object($obj) || !is_object($obj2)) {
            self::toss(
                "InvalidArgument",
                "Merged values must be objects. Got type {0}.",
                gettype($obj)
            );
        }
        
        if (func_num_args() > 2) {
            $args = func_get_args();
            $obj  = array_shift($args);
            foreach($args as $arg) {
                self::merge($obj, $arg);
            }
        } else {
            foreach($obj2 as $name => $value) {
                if (null !== $value) {
                    $obj->$name = $value;
                }
            }
        }
        
        return $obj;
    }