>  기사  >  백엔드 개발  >  PHP: 정적 정적 변수와 일반 변수의 차이점 분석

PHP: 정적 정적 변수와 일반 변수의 차이점 분석

黄舟
黄舟원래의
2017-07-02 12:00:171931검색

1. 변수 앞에 static을 추가하여 static 변수(정적 변수)를 만듭니다.
2. 정적 변수와 일반 변수의 차이점은 비정적 전역 변수 의 범위가 전체 소스 프로그램이라는 것입니다. 소스 프로그램이 여러 소스 파일로 구성된 경우 비정적 전역 변수는 각 소스 파일에서 유효합니다. . 의. 정적 전역 변수는 범위를 제한합니다. 즉, 변수가 정의된 소스 파일 내에서만 유효하며 동일한 소스 프로그램의 다른 소스 파일에서는 사용할 수 없습니다. 정적 전역 변수의 범위는 하나의 소스 파일로 제한되고 해당 소스 파일의 함수에서만 공유할 수 있으므로 다른 소스 파일에서 오류를 피할 수 있습니다. 3. 정적 변수와 일반 변수의 차이점:
정적 전역 변수와 일반 전역 변수의 차이점: 정적 전역 변수는
다른 파일 단위에서 참조되지 않도록 한 번만 초기화됩니다. 정적 로컬 변수의 차이점 변수와 일반 지역 변수: 정적 지역 변수는 한 번만 초기화되고 다음 번에는 이전 결과 값을 기반으로 합니다.
정적 함수와 일반 함수의 차이점: 정적 함수는 메모리에 복사본이 하나만 있고 일반 함수는 각 통화마다 복사하세요.
4. 전역 변수 앞에 static 키워드를 추가하면 전역 변수가 전역 정적 변수로 정의됩니다.
1) 메모리 내 위치: 정적 저장 영역(정적 저장 영역은 전체 프로그램 실행 중에 존재함)
2) 초기화: 초기화되지 않은 전역 정적 변수는 프로그램에 의해 자동으로 0으로 초기화됩니다.
3) 범위: 전역 정적 변수는 선언된 파일 외부에서 볼 수 없습니다. 정확히 정의 지점부터 파일 끝까지.
5. 정적 변수의 장점:
다른 파일에서 액세스할 수 없습니다. 충돌 없이 다른 파일에서 동일한 이름을 가진 변수를 수정할 수 있습니다.
메모리 내 위치: 정적 저장 영역
초기화: 초기화되지 않은 전역 정적 변수는 프로그램에 의해 자동으로 0으로 초기화됩니다. (자동 객체의 값은 명시적으로 초기화되지 않는 한 임의적입니다.)
범위: 범위는 여전히 로컬입니다. 이를 정의하는 함수 또는 명령문 블록이 끝납니다.

참고: 지역 변수를 수정하기 위해 static을 사용하면 지역 변수의 저장 위치가 원본 스택에서 정적 저장 영역으로 변경됩니다. 그러나 지역 정적 변수는 범위를 벗어난 후에도 소멸되지 않고 프로그램이 끝날 때까지 메모리에 계속 남아 있지만 더 이상 액세스할 수 없습니다.
전역 변수를 수정하기 위해 static을 사용하면 전역 변수의 범위가 변경되지만(선언된 파일 외부에는 표시되지 않음) 저장 위치는 변경되지 않으며 여전히 정적 저장 영역에 있습니다. .

 Static은 정적 객체나 정적 변수를 정의하는 것입니다. 이 글의 관련 예제를 읽으면 static으로 정의된 변수나 클래스 메서드의 특성을 알 수 있습니다.

 1.

객체
$object = new Class()를 생성한 다음 변수/메서드에 액세스할 수 있는 경우 "->"를 사용하여 $object->attribute/function을 호출합니다.  2. 정적이든 비정적이든 상관없이 클래스 메서드/변수: class::attribute/function을 직접 호출합니다. 하지만 전제 조건이 있습니다:  A. 변수인 경우 해당 변수에 액세스할 수 있어야 합니다.
 B. 메소드인 경우 액세스 가능한 메소드 외에도 다음을 충족해야 합니다.
 b1) 정적 메소드인 경우 특별한 조건이 없습니다.
 b2) 비정적 메소드인 경우; , 메소드에서 $this 를 사용하지 않도록 변경해야 합니다. 즉, 비정적 변수/메서드 호출이 없으며, 물론 정적 변수/메서드 호출에는 문제가 없습니다.
 그럼 $object->... 사용과 class::... 사용의 차이점을 살펴보겠습니다.
 1. $object->... 사용 시
constructor
를 실행하여 객체를 생성해야 합니다. 2. class::...를 사용하여 정적 메서드/변수를 호출하면 객체를 생성하기 위해 생성자를 실행할 필요가 없습니다.  3. 비정적 메서드/변수를 호출하려면 class::...를 사용하세요. 객체를 생성하기 위해 생성자를 실행할 필요가 없습니다.   그렇다면 이상한 점이 나옵니다. 2와 3이 동일하므로 정적 메소드/변수가 존재하는 이유는 무엇입니까?
  Static static
  클래스 멤버나 메서드를 static으로 선언하면 클래스를 인스턴스화하지 않고 직접 액세스할 수 있습니다(정적 메서드 제외). 정적 멤버는 클래스에 속하며 어떤 객체 인스턴스에도 속하지 않지만 클래스의 객체 인스턴스는 공유될 수 있습니다.

위 내용은 PHP: 정적 정적 변수와 일반 변수의 차이점 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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