我的php版本是5.2.17 我做了一个PHP函数
PHP_FUNCTION(GetProductFamily)
{
zval *productFamily;
int ret;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z",&productFamily) == FAILURE)
{
return;
}
productFamily->value.lval = 1;
RETURN_LONG(WS_OK);
}
将$ productFamily传递给此函数,其值将被更改。
然后在php中,如果我只是调用这个函数就可以了:
<?php
$productFamily=0;
GetProductFamily(&$productFamily);
echo $productFamily;
?>
return 1;
or without &
<?php
$productFamily=0;
GetProductFamily($productFamily);
echo $productFamily;
?>
still return 1.
但是当我使用call_user_func_array来调用这个函数时,事情变得很奇怪
<?php
$productFamily = 0;
call_user_func_array('GetProductFamily', array(&$productFamily));
echo $productFamily; //return 0, should be 1 !
?>
然而
<?php
$productFamily = 0;
call_user_func_array('GetProductFamily', array($productFamily));
echo $productFamily; //return 1 this time...
?>
因为GetProductFamily可以更改$ productFamily,所以我想我们必须在这里通过referece,但正如你所看到的,&amp;不起作用.... 我很困惑,因为当得到PHP提供的一些基本功能时,&amp;需要!
<?php
$array = array("ab","cd");
call_user_func_array("array_shift", array(&$array));
var_dump($array); //return array("cd");
?>
means
<?php
$array = array("ab","cd");
call_user_func_array("array_shift", array($array));
var_dump($array); //return array("ab","cd");
?>
为什么?
答案 0 :(得分:0)
仅在内部功能“&amp;”中需要 在扩展时,似乎zval为你做了一切