소개
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