另一位同事和我一直在大力修改PHP Zookeeper扩展,但真正困扰我的一件事就是依赖PHP错误和异常。
原始来源位于:http://github.com/andreiz/php-zookeeper/blob/master/php_zookeeper.c#L209
相反,抛出Zookeeper_NodeNotExists或类似的东西会更好,除了我不知道c中的API调用是什么。
我已经尝试使用谷歌搜索并在PHP语言中获得了一组例外的异常,PHP手册似乎没有提到它们,我不记得哪些PHP库存扩展为您抛出异常。是否有关于PHP / Zend c API的替代文档来源?
答案 0 :(得分:7)
我查看了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消息,所有其他工作都被委派。
答案 1 :(得分:0)