>백엔드 개발 >PHP 튜토리얼 >PHP 참조에 대한 질문

PHP 참조에 대한 질문

WBOY
WBOY원래의
2016-08-31 08:54:511097검색

//참고로 반품

<code>function &testReturn(){  
    static $b = 1;  
    $b += 2;  
    return $b;  
}  
$a = &testReturn();  
$a = 8;  
$c = &testReturn();
$c = 12;
$d = testReturn();  
//echo $d;  

function &cuitReturn(){
    $a = 2;
    return $a;
}
$cr = &cuitReturn();
//echo $cr;
$cr = 4;
$cr1 = cuitReturn();
echo $cr1;
</code>

두 번째 함수는 할당된 변수의 값을 변경합니다. $cr = 4, 함수의 반환 값은 왜 변경되지 않습니까?

답글 내용:

//참고로 반품

<code>function &testReturn(){  
    static $b = 1;  
    $b += 2;  
    return $b;  
}  
$a = &testReturn();  
$a = 8;  
$c = &testReturn();
$c = 12;
$d = testReturn();  
//echo $d;  

function &cuitReturn(){
    $a = 2;
    return $a;
}
$cr = &cuitReturn();
//echo $cr;
$cr = 4;
$cr1 = cuitReturn();
echo $cr1;
</code>

두 번째 함수는 할당된 변수의 값을 변경합니다. $cr = 4, 함수의 반환 값은 왜 변경되지 않습니까?

첫 번째 함수의 코드는 실제로 이렇습니다. $b은 정적 변수이므로 함수가 실행된 후에도 해제되지 않습니다.

<code class="php">...    //省略代码
$c = &$b;
$c = 12;    //此处$b为12
$d = testReturn();    //$b+2
echo $d; //当然是14而不是7</code>

그러나 두 번째 함수에서 $a은 지역 변수입니다. 함수가 실행된 후 이 변수의 메모리가 해제됩니다.

먼저 호출 함수가 참조를 반환하는지 여부를 명확히 해야 합니다. 함수 이름 앞에 &가 와야 하고, 대입문 앞에는 &가 와야 합니다. 🎜> 질문 제목은 실제로는 참고용이 아닙니다. 질문자 말씀으로 돌아가서, 왜 반환 값이 변경되지 않았나요? $cr1 = cuitReturn(); 함수의

가 지역 변수이고 정적이 아니어서 함수가 반환된 후에 해제되기 때문입니다.

로컬 변수를 참조하는 것과 같습니다. cuitReturn 이것을 C++에 배치하면 큰 문제가 발생합니다... 포인터가 알 수 없는 메모리를 가리킨다는 의미이지만 $a PHP 엔진이 이를 처리해야 하므로 $cr = &cuitReturn();(에 대한 참조가 유효하지 않음 )

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.