클래스를 정의할 때 static 키워드를 사용한 프로퍼티와 메소드는 해당 클래스의 인스턴스를 생성하지 않아도 접근할 수 있게 됩니다.
이러한 프로퍼티와 메소드를 정적 멤버(static member)라고 합니다.
특징
class StaticMember
{
public static $staticProperty = "static property";
public static function showProperty()
{
echo self::$staticProperty;."<br>";
}
}
echo StaticMember::showProperty(); // 호출 가능
echo StaticMember::$staticProperty; // 접근 가능
$var = new StaticMember(); // 인스턴스 생성
echo $var->showProperty(); // 호출 가능
//echo $var->$staticProperty; // 접근 불가능
정적메소드인 showProperty는 자신을 가르키는 $this의사 변수를 사용하지 못함 따라서 self키워드와 함께 범위 지정 연산자 "::" 을 사용하여 프로퍼티에 접근,
또한 생성된 인스턴스에서는 정적 프로퍼티에 접근 불가능
클래스의 프로퍼티나 메소드에 접근하기 위해서는 인스턴스를 생성하고, 화살표 연산자(->)를 사용해야 합니다.
하지만 단순히 클래스의 정의 내에서 프로퍼티나 메소드를 사용하고 싶을 때는 범위 지정 연산자(::)를 사용할 수 있습니다.
범위 지정 연산자(::)는 클래스의 상수, 정적(static) 멤버 또는 재정의된 멤버에 접근할 수 있게 해줍니다.
클래스의 정의 외부에서 위와 같은 멤버에 접근할 때는 클래스의 이름을 사용해야 합니다.
echo OtherClassName::CONSTANT;//상수사용
또한, 다음 키워드를 사용하면 클래스의 정의 내에서 특정 프로퍼티나 메소드에 접근할 수 있습니다.
echo self::$property;
echo parent::CONSTANT;