我一直在研究PSR-7 UriInterface的实现,关于实现何时应该为某些组件抛出 InvalidArgumentException 的规范有点令人费解。
例如,UriInterface::withPath 指定在给定无效路径的情况下抛出这样的异常,但相同的文档块指出,“用户可以提供编码和解码的路径字符”,因为“实现确保正确的编码”。
/**
* ...
*
* Users can provide both encoded and decoded path characters.
* Implementations ensure the correct encoding as outlined in getPath().
*
* @param string $path The path to use with the new instance.
* @return static A new instance with the specified path.
* @throws \InvalidArgumentException for invalid paths.
*/
负责管理编码的实现在整个规范的其余部分都得到了证实。
由于实现确保了正确的编码,因此实现的用户似乎可以将任意数量的无效字符传递到 withPath 之类的函数中,然后该函数将被正确编码而不是触发异常。
我能想到的唯一可以保证 InvalidArgumentException 的情况是,如果 withPath 传递了一个非字符串(不管它的价值如何,这似乎是Guzzle 对规范的解释)。
真正严格阅读PHP 对 InvalidArgumentException 的简要介绍似乎可以避免这种“严格类型”解释,但我不禁想知道 PHP-FIG 是否还有其他想法,特别是考虑到 URI 语法的复杂性一般来说。
如果 UriInterface 方法(如 withPath)传递了一个字符串,是否存在任何情况下应该抛出异常?