0

私の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 を変更できるため、ここでは参照渡しを行う必要があると思いますが、ご覧のとおり、& は機能しません。 、 & が必要です!

<?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");
?>

どうして??

4

1 に答える 1

0

内部関数でのみ「&」が必要です

于 2012-08-24T06:57:01.650 に答える