php - 我应该使用什么类条目来从 C 扩展中抛出非默认异常?

标签 php c php-extension

在我的 C 扩展中,我可以使用 zend_throw_exception 向调用函数抛出 PHP 异常。该函数的第一个参数是 zend_class_entry,它指定要抛出的异常类型。我从 zend_exceptions.h 中的文档知道我可以使用 zend_exception_get_default() 来使用默认异常类型。

但是,它还说我可以传递派生类。在哪里可以找到派生的内置异常的类条目,例如 InvalidArgumentException

最佳答案

所有异常都在此处的源代码中定义;

 php-5.5.15/ext/spl/spl_exceptions.h

并且可以在安装开发包时在此处找到(例如 yum install php-devel 在 fedora 上);

 /usr/include/php/ext/spl/spl_exceptions.h

并包含以下内容;

extern PHPAPI zend_class_entry *spl_ce_LogicException;
extern PHPAPI zend_class_entry *spl_ce_BadFunctionCallException;
extern PHPAPI zend_class_entry *spl_ce_BadMethodCallException;
extern PHPAPI zend_class_entry *spl_ce_DomainException;
extern PHPAPI zend_class_entry *spl_ce_InvalidArgumentException;
extern PHPAPI zend_class_entry *spl_ce_LengthException;
extern PHPAPI zend_class_entry *spl_ce_OutOfRangeException;

extern PHPAPI zend_class_entry *spl_ce_RuntimeException;
extern PHPAPI zend_class_entry *spl_ce_OutOfBoundsException;
extern PHPAPI zend_class_entry *spl_ce_OverflowException;
extern PHPAPI zend_class_entry *spl_ce_RangeException;
extern PHPAPI zend_class_entry *spl_ce_UnderflowException;
extern PHPAPI zend_class_entry *spl_ce_UnexpectedValueException;

并且可以根据单元测试抛出样;

zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "array size cannot be less than zero");

关于php - 我应该使用什么类条目来从 C 扩展中抛出非默认异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25166817/

相关文章:

javascript - angularjs Controller 有什么问题

php - 将 Ajax JQuery 选择器保存在数组中

php - PDO 存储过程调用

c# - 如何从指针地址获取对象

c - 非规范模式不适用于反引号

php - 尽管尝试了所有方法,mysql表仍然显示小黑色问号

c - 使用套接字传输数据时避免结构填充的最佳方法是什么?

php - 使用 PHPdoc 记录 PHP 扩展

php - 需要将算法编程得非常快,我应该用 php 扩展还是其他方式来做?

php - 在哪里可以下载适用于 Windows 的 PHP 扩展?