PHP에서 정적 정적 변수와 일반 변수의 차이점
정적 변수를 형성하려면 변수 앞에 static을 추가하세요.
정적 변수와 일반 변수의 차이점은 비정적 전역 변수의 범위가 전체 소스 프로그램이라는 점입니다. 소스 프로그램이 여러 소스 파일로 구성된 경우 비정적 전역 변수는 각 소스 파일에서 유효합니다. 정적 전역 변수는 범위를 제한합니다. 즉, 변수가 정의된 소스 파일 내에서만 유효하며 동일한 소스 프로그램의 다른 소스 파일에서는 사용할 수 없습니다. 정적 전역 변수의 범위는 하나의 소스 파일로 제한되고 해당 소스 파일의 함수에서만 공유할 수 있으므로 다른 소스 파일에서 오류를 피할 수 있습니다.
정적 변수와 일반 변수의 차이점:
정적 전역 변수와 일반 전역 변수의 차이점: 정적 전역 변수는 한 번만 초기화되어 다른 파일 단위에서 참조되지 않습니다.
정적 지역 변수와 일반 지역 변수의 차이점: 정적 지역 변수는 한 번만 초기화되고 다음 번에는 이전 결과 값을 기반으로 합니다.
정적 함수와 일반 함수의 차이점: 정적 함수는 메모리에 복사본이 하나만 있는 반면 일반 함수는 호출될 때마다 복사본을 유지합니다.
글로벌 변수 앞에 static 키워드를 추가하면 해당 글로벌 변수가 글로벌 정적 변수로 정의됩니다.
1) 메모리 내 위치 : 정적 저장 영역 (전체 프로그램 실행 중에 정적 저장 영역이 존재함)
2) 초기화: 초기화되지 않은 전역 정적 변수는 프로그램에 의해 자동으로 0으로 초기화됩니다. (자동 개체의 값은 명시적으로 초기화되지 않는 한 임의적입니다.)
3) 범위: 전역 정적 변수는 선언된 파일 외부에서 볼 수 없습니다. 정확히 정의 지점부터 파일 끝까지.
정적 변수의 이점:
다른 파일에서는 접근할 수 없습니다. 다른 파일에 있는 동일한 이름의 변수를 충돌 없이 수정할 수 있습니다.
메모리 내 위치 : 정적 저장 영역
초기화: 초기화되지 않은 전역 정적 변수는 프로그램에 의해 자동으로 0으로 초기화됩니다(자동 개체의 값은 명시적으로 초기화되지 않는 한 임의적입니다)
범위: 범위를 정의하는 함수나 명령문 블록이 종료되면 범위는 여전히 로컬 범위입니다.
참고: static을 사용하여 지역 변수를 수정하면 지역 변수의 저장 위치가 원래 스택에서 정적 저장 영역으로 변경됩니다. 그러나 지역 정적 변수는 범위를 벗어난 후에도 소멸되지 않고 프로그램이 끝날 때까지 메모리에 계속 남아 있지만 더 이상 액세스할 수 없습니다.
전역 변수를 수정하기 위해 static을 사용하는 경우 전역 변수의 범위는 변경되지만(선언된 파일 외부에는 표시되지 않음) 저장 위치는 변경되지 않으며 여전히 정적 저장 영역에 있습니다.
일반적인 기능 예:
<?php function Test() { $w3sky = 0; echo $w3sky; $w3sky++; /*函数每次调用时都会将 $w3sky 的值设为 0 并输出 "0"。将变量加一的 $w3sky++ 没有其到效果,因为一旦退出本函数则变量 $w3sky 就不存在了。*/ } ?>
$w3sky 변수를 정적으로 정의하는 코드는 다음과 같습니다.
<?php function Test() { static $w3sky = 0; echo $w3sky; $w3sky++; } //本函数每调用Test()都会输出 $w3sky 的值并加一。 ?>
정적 변수는 재귀 함수를 처리하는 방법도 제공합니다. 재귀 함수는 자신을 호출하는 메서드입니다. 재귀 함수를 작성할 때는 종료 없이 무한정 재귀할 수 있으므로 주의하십시오. 재귀를 중단할 수 있는 방법이 있는지 확인하십시오. 다음의 간단한 함수는 정지 시점을 결정하기 위해 정적 변수 $count를 사용하여 10까지 재귀적으로 계산합니다. 정적 변수 및 재귀 함수의 예:
<?php function Test() { static $count = 0; $count++; echo $count; if ($count < 10) { Test(); } $count--; } ?>
참고: 정적 변수는 표현식 형식으로 선언할 수 없습니다. 예: static $int = 1+2; 이 방법은 잘못되었지만 static $int = 1;
읽어주셔서 감사합니다. 도움이 되기를 바랍니다. 이 사이트를 지원해 주셔서 감사합니다!