use InvalidArgumentException from SPL