我与Zend Framework合作很多,我只是看了一眼Kohana,这让我觉得奇怪,这是这些框架中的一个典型场景:
throw Some_Components_Exception( 'invalid argument' );
我认为这不会更有用:
throw Some_Components_InvalidArgumentException( 'whatever discription' );
因为它更容易捕获。
我怀疑,但立即承认它有偏见,以前的做法在PHP社区中很常见。我们PHP社区是否应该开始更多地使用这些描述性类型的预期?
答案 0 :(得分:3)
是的,我建议使用SPL提供的Exception子类型。它允许调用代码(在框架中或在您的应用程序中)以不同方式处理不同类型的异常。
DomainException
可能表示无效的用户输入,您应该向用户报告并让他们有机会重新输入数据。 BadMethodCallException
可能表示您的代码存在缺陷,您应该记录并以不同的方式处理它。
但是这些不同的异常情况与抛出异常的类或组件无关。无论是在MVC组件还是数据库访问层中,都应该类似地处理BadMethodCallException
。
通过1.0发布,我是Zend Framework的项目负责人。我想重新组织异常层次结构,我认为这是一个任意决定(在我加入项目之前)为每个组件使用一个例外。它没有意义。
不幸的是,重新架构异常并不像将产品推向1.0版本的里程碑那么重要。我必须按照Zend为项目设置的时间表遵循优先级,并且为此,实际上必须推迟完成功能完整版本所不必要的一切。