PHP扩展函数返回值 RETURN_LONG(123) 宏替换过程如下:
替换之前:
RETURN_LONG(123);
第1次替换:
{ RETVAL_LONG(123); return; }
第2次替换:
{ ZVAL_LONG(return_value, 123); return; }
第3次替换:
{ { zval *__return_value = (return_value); Z_LVAL_P(__return_value) = 123; Z_TYPE_P(__return_value) = IS_LONG; }; return; }
第4次替换:
{ { zval *__return_value = (return_value); Z_LVAL(*__return_value) = 123; Z_TYPE(*__return_value) = IS_LONG; }; return; }
第5次替换:
{ { zval *__return_value = (return_value); (*__return_value).value.lval = 123; (*__return_value).type = IS_LONG; }; return; }
替换完之后 RETURN_LONG(123); 等价于第5次替换结果,返回值直接定义为第5次结果也是可以的,如果你不嫌麻烦的话。
看替换之后的结果 return_value 与函数名替换完之后里面的参数 return_value 是对应起来的,到这一步就明白php函数返回值是怎么返回的了,其它类型返回值替换类似。