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

时间:2010-10-14 20:59:03

标签: php c documentation

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

2 个答案:

答案 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)