이 기사에서는 php5.4에서 참조를 전달할 때 발생하는 오류 문제를 분석하기 위해 예제를 사용합니다. 참고하실 수 있도록 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.
php5.3 시리즈 및 이전 버전에서는 참조 전달에 문제가 없습니다. php5.4로 업그레이드한 후 참조 전달 시 모든 오류가 보고됩니다.
치명적인 오류: F:workwampwwwtesttest.php 6행에서 참조에 의한 호출 시간이 제거되었습니다. 아래 예시를 살펴보세요.
예 1, 재귀적 참조 전송, PHP 5.3 이상에서 테스트 결과
<?php function test($aa,&$bb){ if($aa < $bb){ echo $bb."<br>"; $bb--; test($aa,&$bb); } } $aa = 3; $bb = 6; test($aa,&$bb); ?>
실행 결과는 다음과 같습니다
6
5
4
PHP 5.4 이후에는 작동하지 않습니다. PHP 5.4.11에서 테스트했습니다. 보고됨치명적인 오류: F:workwampwwwtesttest.php 6행에서 참조에 의한 호출 시간 전달이 제거되었습니다.
예제 2, php5.4.11에서 테스트, 참조만 전달
<?php function test($aa,&$bb){ if($aa < $bb){ $bb--; echo $bb."<br>"; //test($aa,&$bb); } } $aa = 3; $bb = 6; test($aa,$bb); //php5.4,php5.3及以前版本,输入结果是5 //test($aa,&$bb); //php5.3输入结果是5,php5.4及以后,报错Fatal error: Call-time pass-by-reference 。。。。 ?>
php5.4 이후에는 정의시 &를 가질 수 있습니다. 호출시 &를 추가하면 오류가 발생합니다. 이렇게 부르면 기분이 이상해요.
예제 3, php5.4 및 재귀 참조
<?php function test($aa,&$bb){ if($aa < $bb){ $bb--; echo $bb."<br>"; test($aa,$bb); } } $aa = 3; $bb = 6; test($aa,$bb); ?>
php5.2, php5.3, php5.4를 모두 실행할 수 있습니다. 결과는 다음과 같습니다.
5
4
3
5.3에서 5.4로 업그레이드하는 것은 약간의 부정 행위라고 생각합니다. 변경 사항을 모르면 업그레이드하는 것이 매우 우울할 것입니다.
PHP 오류 및 예외와 관련된 더 많은 콘텐츠에 관심이 있는 독자는 이 사이트의 특별 주제인 "PHP 오류 및 예외 처리 방법 요약"
을 확인할 수 있습니다.이 기사가 PHP 프로그래밍에 종사하는 모든 사람에게 도움이 되기를 바랍니다.