PHP扩展开发中如何处理错误码

PHP扩展开发中,一种高效的开发方式是,库的内核层和PHPAPI层分离。例如Swoole,和PHP相关的API层放在了项目的根目录里面,和Swoole内核有关的代码放在了src目录里面。

我们在开发扩展的时候,不可避免的要去抛出异常或者Error等错误。那么,我们如何去处理库的内核代码返回的错误码呢?比如说,我们有操作系统返回的错误码ECHILDEMFILE等等。或者还有我们自己定义的一些操作不当的错误码,例如EMISUSE

一般遵循如下规则:操作系统返回的errno(例如EMFILE)我们抛出的是Exception这种可捕获的错误,因为这是运行时的,不确定的错误(运行时错误,即不知道这么做会不会出问题)。还有一种是使用上的错误,我们希望抛出Error, 不希望被捕获(也就是说,你这样做了,一定会错,所以没必要抛异常让你捕获了,直接让程序崩掉),我们可以让库的内核代码返回自定义的错误码EMISUSE,方便上层(例如PHP扩展层面)识别。