标题: PHP函数源码中的return_value变量
作者: Demon
链接: https://demon.tw/programming/php-function-return_value.html
版权: 本博客的所有文章,都遵守“署名-非商业性使用-相同方式共享 2.5 中国大陆”协议条款。
最近在看PHP的C源码,经常发现在函数定义中莫名其妙地出现一个没有任何声明的return_value变量,Google了一下才知道,这个变量是通过宏展开的。
在main\php.h中:
#define PHP_FUNCTION ZEND_FUNCTION
在Zend\zend_API.h中:
#define ZEND_FN(name) zif_##name #define ZEND_NAMED_FUNCTION(name) void name(INTERNAL_FUNCTION_PARAMETERS) #define ZEND_FUNCTION(name) ZEND_NAMED_FUNCTION(ZEND_FN(name))
在Zend\zend.h中:
#define INTERNAL_FUNCTION_PARAMETERS int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, int return_value_used TSRMLS_DC
举个例子来说,PHP_FUNCTION(strtolower)最终会展开成为:
void zif_strtolower(int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, int return_value_used TSRMLS_DC)
return_value其实是作为函数形参出现的。
参考链接:PHP源码阅读笔记十二:return_value 返回值
赞赏微信赞赏支付宝赞赏
随机文章: