另一个同事和我一直在大量修改PHP扩展动物园管理员,但有一件事真正困扰我的是PHP错误的VS异常的依赖.
原始资料来源:http://github.com/andreiz/php-zookeeper/blob/master/php_zookeeper.c#L209
相反,抛出Zookeeper_NodeNotExists或类似的东西会更好,除了我不知道c中的API调用是什么.
我已经尝试使用谷歌搜索并在PHP语言中获得了一组例外的异常,PHP手册似乎没有提及它们,我不记得哪些PHP库存扩展为您抛出异常.那里有PHP/Zend c API的替代文档来源吗?
我查看了PHP 5.3的Sqlite扩展的源代码,特别是Sqlite.c,我知道它引发了异常并找到了
通过sqlite - https://github.com/php/php-src/blob/PHP-5.3/ext/sqlite/sqlite.c#L46
#include "zend_exceptions.h"
在zend_exceptions.h中,看起来可以通过简单的调用来引发RuntimeException
zend_throw_exception(NULL, "Some text")
如下所述https://github.com/php/php-src/blob/PHP-5.3/Zend/zend_exceptions.h#L43
Sqlite3扩展使用它如下:
zend_throw_exception(zend_exception_get_default(TSRMLS_C), "Already initialised DB Object", 0 TSRMLS_CC);
我推断zend_exception_get_default()获取RuntimeException的引用/句柄,第二个参数是Exception消息,所有其他工作都被委托.