mur*_*d99 8 php c php-extension
在我的C扩展中,我可以向调用函数抛出一个PHP异常zend_throw_exception.该函数的第一个参数是zend_class_entry指定要抛出的异常类型.我从文档中知道zend_exceptions.h,我可以使用zend_exception_get_default()默认的异常类型.
但是,它也说我可以传递派生类.我在哪里可以找到派生的内置异常的类条目,例如InvalidArgumentException?
所有例外都在源代码中定义;
php-5.5.15/ext/spl/spl_exceptions.h
Run Code Online (Sandbox Code Playgroud)
并且可以在安装devel包时找到(例如yum install php-devel在fedora上);
/usr/include/php/ext/spl/spl_exceptions.h
Run Code Online (Sandbox Code Playgroud)
并包含以下内容;
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;
Run Code Online (Sandbox Code Playgroud)
并且可以根据单元测试抛出;
zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "array size cannot be less than zero");
Run Code Online (Sandbox Code Playgroud)