代码之家  ›  专栏  ›  技术社区  ›  David

从PHP扩展引发异常而不是错误[已关闭]

  •  6
  • David  · 技术社区  · 14 年前

    另一位同事和我一直在大量修改PHP Zookeeper扩展,但真正困扰我的是对PHP错误vs异常的依赖。

    原始来源如下: http://github.com/andreiz/php-zookeeper/blob/master/php_zookeeper.c#L209

    相反,最好是提出一个动物园管理员或类似的,除非我不知道在c中的API调用是什么。

    我试过google,在PHP语言中得到了大量的异常结果集,PHP手册似乎没有提到它们,我也不记得哪个PHP股票扩展为您抛出了异常。有没有关于PHP/zencapi的其他文档来源?

    2 回复  |  直到 14 年前
        1
  •  7
  •   David    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中,似乎可以通过调用

    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的引用/句柄,第二个参数是异常消息,并且所有其他工作都被委托。