周梦康 发表于 2016-02-27 6782 次浏览 标签 : PHP 扩展开发

PHP 扩展开发的文章,我均已更新至《TIPI》(下面的博文可能已经过时,以 TIPI 上的内容为准)。

zend_API.h中定义了丰富的用于从函数中返回值的宏。

这些宏有两种主要风格:

第一种是RETVAL_type()形式,它设置了返回值但C代码继续执行。这通常使用在把控制交给脚本引擎前还希望做的一些清理工作的时候使用,然后再使用C的返回声明return 返回到PHP;

第二种RETURN_type()形式,他设置了返回类型,同时返回控制到PHP。

拿个宏的定义举例

#define RETVAL_BOOL(b)					ZVAL_BOOL(return_value, b)
#define RETURN_BOOL(b) 					{ RETVAL_BOOL(b); return; }

下表解释了大多数存在的宏。


设置返回值并且结束函数设置返回值宏返回类型和参数
RETURN_LONG(l)RETVAL_LONG(l)整数
RETURN_BOOL(b)RETVAL_BOOL(b)布尔数(1或0)
RETURN_NULL()RETVAL_NULL()NULL
RETURN_DOUBLE(d)RETVAL_DOUBLE(d)浮点数
RETURN_STRING(s, dup)RETVAL_STRING(s, dup)字符串。如果dup为1,引擎会调用estrdup()重复s,使用拷贝。如果dup为0,就使用s
RETURN_STRINGL(s, l, dup)RETVAL_STRINGL(s, l, dup)长度为l的字符串值。与上一个宏一样,但因为s的长度被指定,所以速度更快。
RETURN_TRUERETVAL_TRUE返回布尔值true。注意到这个宏没有括号。
RETURN_FALSERETVAL_FALSE返回布尔值false。注意到这个宏没有括号。
RETURN_RESOURCE(r)RETVAL_RESOURCE(r)资源句柄。



参考 http://www.laruence.com/2009/04/28/719.html

评论列表