【PHP】php 源码之宏 PHP_FUNCTION

本文所用 php 源码版本为 7.1.33

在 php 源码目录下的 main/php.h 头文件中定义了宏 PHP_FUNCTION
我们经常使用的 php 函数就是她来定义的,
【PHP】php 源码之宏 PHP_FUNCTION_第1张图片
从上图中可以看到该宏定义为 ZEND_FUNCTION
ZEND_FUNCTION 定义在 Zend/zend_api.h 头文件中,
【PHP】php 源码之宏 PHP_FUNCTION_第2张图片
在 C 语言宏定义中的 ## 代表连接在其左右的字符串。
由上图中可以看到该宏的定义最终落在宏 INTERNAL_FUNCTION_PARAMETERS 上,
INTERNAL_FUNCTION_PARAMETERS
其中,zend_execute_data 为结构体 _zend_execute_data 的别名,见下图,
【PHP】php 源码之宏 PHP_FUNCTION_第3张图片
结构体 _zend_execute_data 的定义见下图,
【PHP】php 源码之宏 PHP_FUNCTION_第4张图片
以我们常用的 bcmath 扩展中的 bcadd 函数(ext/bcmath/bcmath.c)为例,
在编译阶段 PHP_FUNCTION(bcadd) 会被替换为

void zif_bcadd(zend_execute_data *execute_data, zval *return_value)

你可能感兴趣的:(PHP,C)