클래스의 정적 멤버는 일반 클래스 멤버와 다릅니다. 정적 멤버는 개체의 인스턴스와 아무 관련이 없으며 클래스 자체에만 관련이 있습니다. 클래스가 캡슐화하려는 함수와 데이터를 구현하는 데 사용되지만 정적 멤버에는 정적 메서드와 정적 속성이 포함된 특정 개체의 함수와 데이터가 포함되지 않습니다.
정적 속성에는 클래스에 캡슐화될 데이터가 포함되어 있으며 클래스의 모든 인스턴스에서 공유할 수 있습니다. 실제로 고정 클래스에 속하고 액세스 방법을 제한하는 것 외에도 클래스의 정적 속성은 함수의 전역 변수와 매우 유사합니다.
다음 예에서는 정적 속성인 Counter::$count를 사용합니다. 이는 Counter 클래스에 속하며 Counter 인스턴스에는 속하지 않습니다. 이것을 참조하는 데 사용할 수는 없지만 self 또는 다른 유효한 명명 표현을 사용할 수 있습니다. 예제에서 getCount 메소드는 Counter::$count가 아니라 self::$count를 반환합니다.
정적 메서드는 클래스에 의해 캡슐화되어야 하며 특정 개체와 관련이 없는 함수를 구현합니다. 정적 메서드는 전역 함수와 매우 유사합니다. 정적 메서드는 클래스의 속성에 완전히 액세스하거나 인스턴스에서 액세스할 수 있습니다.
이전 예에서 getCount는 ->로 호출되는 일반적인 메서드입니다. 그러나 해당 메서드는 사용되지 않지만 PHP는 this 변수를 생성합니다. 어떤 경우에는 유효한 객체가 없을 때 이를 호출하고 싶다면 정적 메소드를 사용해야 합니다. PHP는 객체에서 호출하더라도 정적 메소드 내에 이 변수를 설정하지 않습니다. 6.7에서는 getCount가 6.3에서 Static 메소드로 변경되었습니다.
Static 키워드
는 ->operator를 사용하여 인스턴스가 getCount를 호출하는 것을 방지할 수 없지만, PHP는 this->를 사용하여 메소드 내부에 이 변수를 생성하지 않습니다. 호출하면 오류가 발생합니다. //6.3 예제는 섹션 4의
Constructor
및 Destructor를 참조하세요(이전 기사 참조). 두 예제를 비교하면 을 잘 이해할 수 있습니다. //정적 메소드와 일반 메소드의 차이점
이것이 설정되었는지 판단하여 정적 호출인지 비정적 호출인지 표시하는 메소드를 작성할 수 있습니다. 물론 static 키워드를 사용하면 어떻게 해도 됩니다.
클래스에서는 공용 정적을 사용할 필요가 없으며
const 키워드
만 사용하면 됩니다. 상수 속성은 항상 정적 속성입니다. 클래스의 인스턴스화 객체의 속성 6.7 정적 멤버 나열
<?php class Counter { private static $count = 0; const VERSION = 2.0; function construct() { self::$count++; } function destruct() { self::$count--; } static function getCount() { return self::$count; } }; //创建一个实例,则construct()将执行 $c = new Counter(); //输出 1 print(Counter::getCount() . "n"); //输出类的版本属性 print("Version used: " . Counter::VERSION . "n"); ?>
위 내용은 PHP 클래스의 정적 멤버에 대한 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!