> 백엔드 개발 > PHP 튜토리얼 > 스타얼라이언스 PHP의 정적 키워드 원리 연구 및 분석

스타얼라이언스 PHP의 정적 키워드 원리 연구 및 분석

WBOY
풀어 주다: 2016-07-29 08:46:12
원래의
872명이 탐색했습니다.

PHP 매뉴얼을 읽다가 다음 코드를 발견했습니다.

코드 복사 코드는 다음과 같습니다.


< ;?php
function Test()
{
static $count = 0
$count
echo $count
if ($count < 10); >Test();
$count--;
?>


실행 결과는 다음과 같습니다.
함수, 선언된 정적변수 개수를 기록하여 1~10을 출력한다.

재귀적으로 호출하면 static $count = 0; 문이 반복적으로 실행되는 것을 보니 왜 count 변수가 반복적으로 할당되지 않는 걸까요? 이 질문을 동료들과 함께 연구한 결과 테스트 코드는 다음과 같습니다.



코드 복사

코드는 다음과 같습니다. php

echo 'start
';

static $a = 10; echo "$a
"
unset 'a'] );
echo "$a
"
static $a = 20>echo "$a
"; ['a' ] = 10;
echo "$a
";
static $a = 30; 에코 "$a
"; unset($GLOBALS ['a']);
echo "$a
"
static $a
echo "$a
"; >static $a = 40;
echo "$a
"
$a = 100;
echo "$a
"; a = 50;
echo "$a
";
static $a = 4
echo "$a
"; ;br /> ;';
exit
?>




실행 결과는 다음과 같습니다.







4


주의사항: 정의되지 않은 변수: a
4

    10
  1. 10
  2. 주의사항: 정의되지 않은 변수: a
  3. 10
  4. 10 > 100
  5. 100
  6. 100
  7. 종료
  8. ( 결과에서 파일 위치에 관한 부분이 삭제되었습니다. 또한 echo 문을 제거하고 zend의 디버그 기능을 사용하여 결과를 더 명확하게 볼 수 있습니다.)
  9. 코드 $a
  10. 의 값이 4입니다. 이때 페이지가 초기화될 때 PHP가 정적 변수에 메모리를 할당하는 것으로 추측됩니다. 동일한 변수의 마지막 선언된 값이 사용됩니다. (4는 다른 숫자 테스트로 변경될 수 있습니다.) 코드의 7행에서는 변수 $a를 삭제하기 위해 unset 함수를 호출합니다. $a의 값이 다시 출력되면 변수가 삭제되었음을 나타내는 정의되지 않은 변수 프롬프트가 표시됩니다.
라인 10이 다시 출력되면 출력 결과는 여전히 20이 아닌 4입니다. 하나는 PHP가 $a 값을 다시 초기화하는 것이고, 다른 하나는 다음과 같습니다. PHP가 사용하는 $a 값이 소멸되기 전의 이 문제는 20번째 줄에 출력하면 해결됩니다. $a의 값은 16행에서 소멸될 때 10이고, 19행에서 선언된 후에도 출력은 여전히 ​​10입니다.

11번째 줄에서 $a의 값을 10으로 변경하고, 14번째 줄에서 $a를 다시 선언한 후, 17번째 줄에서 10으로 출력합니다. 선언이 반복되면 PHP는 다시 할당하지 않고 정적 변수 메모리의 값을 계속 사용하는 것으로 추측됩니다.

이쯤 되면 매뉴얼에서 발견한 문제는 대략적으로 해결되었습니다. 즉, 재귀호출의 문장이 $count의 값을 바꾸지 않아서 재귀가 성공적으로 중지되었습니다. $count=10일 때. 잘못된 이해가 있을 수 있으니 댓글 부탁드립니다.

위 내용은 스타얼라이언스의 내용을 포함하여 스타얼라이언스 PHP의 정적 키워드 원리에 대한 연구, 연구 및 분석을 소개한 내용으로, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿