PHP函数源码中的return_value变量

标签: , , ,

最近在看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 返回值

随机文章:

  1. 为什么用strlcpy取代strncpy
  2. 为.VBS和.JS文件添加右键以管理员运行菜单
  3. This document was successfully checked as XHTML 1.0 Strict!
  4. VBS获取GZIP压缩的HTTP内容
  5. Windows 10无法WOL网络唤醒的解决方法

留下回复