>  기사  >  백엔드 개발  >  PHP 클래스의 정적 멤버에 대한 심층 분석

PHP 클래스의 정적 멤버에 대한 심층 분석

伊谢尔伦
伊谢尔伦원래의
2017-06-30 11:18:021109검색

클래스의 정적 멤버는 일반 클래스 멤버와 다릅니다. 정적 멤버는 개체의 인스턴스와 아무 관련이 없으며 클래스 자체에만 관련이 있습니다. 클래스가 캡슐화하려는 함수와 데이터를 구현하는 데 사용되지만 정적 멤버에는 정적 메서드와 정적 속성이 포함된 특정 개체의 함수와 데이터가 포함되지 않습니다.

 정적 속성에는 클래스에 캡슐화될 데이터가 포함되어 있으며 클래스의 모든 인스턴스에서 공유할 수 있습니다. 실제로 고정 클래스에 속하고 액세스 방법을 제한하는 것 외에도 클래스의 정적 속성은 함수의 전역 변수와 매우 유사합니다.

  다음 예에서는 정적 속성인 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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