2012-08-23 2 views
0

내 PHP 버전은 5.2.17 내가참조 문제 자체 제작 확장 기능

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; 
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... 
?> 
전화를 call_user_func_array를 사용할 때

<?php 
$productFamily=0; 
GetProductFamily(&$productFamily); 
echo $productFamily; 
?> 
return 1; 

or without & 

<?php 
$productFamily=0; 
GetProductFamily($productFamily); 
echo $productFamily; 
?> 
still return 1. 

하지만 상황이 이상한 가지고 : 난 그냥이 함수를 호출하는 경우 다음 PHP에서

, 그것은 꽤 괜찮습니다

GetProductFamily가 $ productFamily를 변경할 수 있으므로 ref로 전달해야한다고 가정합니다. 여기에 erece가 있지만 알 수 있듯이 &은 작동하지 않습니다. PHP에서 제공하는 기본 기능을 사용할 때 &이 필요하기 때문에 저는 혼란 스럽습니다.

왜 ?? 단지 내부 기능에

답변

0

은 "&을"확장에서, zval 당신

을 위해 모든 것을 할 것 같다 때 를 필요