config.m4 ---------- 略
PHP_FUNCTION(byref_calltime) { zval *a; if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &a) == FAILURE){ //将接收的第一个参数直接赋给a //如果传递给函数的参数数量小于zend_parse_parameters()要接收的参数数量,它便会执行失败,并返回FAILURE。 //如果我们需要接收多个参数,可以直接在zend_parse_paramenters()的参数里罗列接收载体便可以了,如: RETURN_NULL(); } if(!a->is_ref__gc){//如果a不是引用类型,直接结束 return ; } convert_to_string(a);//转换成字符串 ZVAL_STRING(a, "hello byzef", 1);//给a赋值 } ZEND_BEGIN_ARG_INFO(byref_compiletime_arginfo, 0)//定义arg_info结构体, 与PHP_FUNCTION(byref_calltime) 对应 ZEND_ARG_PASS_INFO(1) ZEND_END_ARG_INFO()
测试代码(php):
$a = 'init'; byref_compiletime($a); echo $a;