从PHP扩展中抛出异常而不是错误

Dav*_*vid 6 php c documentation

另一个同事和我一直在大量修改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的替代文档来源吗?

Dav*_*vid 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"
Run Code Online (Sandbox Code Playgroud)

在zend_exceptions.h中,看起来可以通过简单的调用来引发RuntimeException

zend_throw_exception(NULL, "Some text")
Run Code Online (Sandbox Code Playgroud)

如下所述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);
Run Code Online (Sandbox Code Playgroud)

我推断zend_exception_get_default()获取RuntimeException的引用/句柄,第二个参数是Exception消息,所有其他工作都被委托.