大头龙仔Blog

A strong man can save himself. A great man can save another.

PHP扩展模块的引用参数实现

| Comments

如果一个函数叫

function test( & $retCode )
{
    $retCode = 1;
}
那么test($ret)后,$ret的值就为1,这个和C/C++里的指针、引用参数是一样的

在PHP扩展模块里,我们也可以实现这种写法

PHP_FUNCTION(php_test)
{
    zval *out = NULL;
    zval *Rg  = NULL;
    
    if( zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,"z", &out) == FAILURE )
    {
        RETURN_NULL();
    }
    
    zval_dtor(out);
    ALLOC_INIT_ZVAL(Rg);
    array_init(Rg);

add_assoc_string(Rg, “name”, “slackcode”, sizeof(“slackcode”)-1, 1);
add_assoc_long(Rg, “age”, -1);
add_assoc_long(Rg, “luckyNum”, 11);

ZVAL_ZVAL(out, Rg, 1, 1);

RETURN_LONG(0);
} 这样子,我们调用

$person = NULL;
php_test($person);
将返回
Array
(
    [name] => slackcode
    [age] => -1
    [luckyNum] => 11
)
这就实现了引用参数咯
可以到这里看看相关资料

Comments