소개
PHP 클래스에서 static 키워드로 선언된 속성과 메서드는 -> 연산자를 사용하여 해당 객체에서 액세스할 수 없습니다. 사실, object는 클래스의 어떤 인스턴스에도 접근할 필요가 없습니다. 클래스에서 정적 항목의 기본 가시성은 공개입니다.
정적 속성
외부 클래스에서 정적 속성에 액세스하려면 클래스 이름과 함께 범위 확인 연산자(::)를 사용해야 합니다. 클래스 이름으로 평가되는 문자열 변수는 정적 속성에 제공할 수도 있습니다.
<?php class testclass{ static $name="test"; } echo testclass::$name; $var="testclass"; echo $var::$name; ?>
동일한 클래스의 메서드 내에서 정적 속성을 사용하려면 self를 사용하세요. 인스턴스 속성에 액세스하는 데 사용되는 -> 연산자 대신 키워드입니다.
<?php class testclass{ static $name="test"; public function test(){ echo self::$name; } } $obj=new testclass(); $obj->test(); ?>
부모 클래스에 선언된 모든 정적 속성은 parent를 사용하여 자식 클래스 메서드 내에서 참조할 수 있습니다. 범위 확인 연산자와 함께 키워드
<?php class testclass{ static $name="test"; public function test(){ echo self::$name; } } class myclass extends testclass{ public function mytest(){ echo parent::$name; } } $obj=new myclass(); $obj->mytest(); ?>
정적 메서드
메서드가 정적으로 선언되면 의사 변수 $this 사용할 수 없습니다. 따라서 클래스의 인스턴스 속성에 액세스할 수 없습니다. 정적 메서드는 범위 확인 연산자와 함께 클래스 이름으로 호출됩니다.
다음 예제에서 클래스에는 생성자가 실행될 때마다(즉, 각 개체에 대해) 증가하는 정적 속성 $count가 있습니다. 클래스 내부에는 정적 속성의 값을 가져오는 정적 함수가 있습니다.
예시
<?php class testclass{ static $count=0; function __construct(){ self::$count++; } static function showcount(){ echo "count = " . self::$count; } } $a=new testclass(); $b=new testclass(); $c=new testclass(); testclass::showcount(); ?>
출력
이것은 다음과 같은 출력을 생성합니다 -
count = 3