이 페이지에서는 정적 메서드와 속성을 정의하기 위해 static 키워드를 사용하는 방법을 설명합니다. static은 정적 변수와 후기 정적 바인딩을 정의하는 데에도 사용할 수 있습니다.
클래스 특성이나 메서드를 정적으로 선언하면 클래스를 인스턴스화하지 않고도 직접 액세스할 수 있습니다. 정적 속성은 인스턴스화된 클래스의 개체를 통해 액세스할 수 없습니다(그러나 정적 메서드는 가능함).
PHP 4와 호환되기 위해 액세스 제어가 지정되지 않은 경우 속성과 메서드는 기본적으로 공개로 설정됩니다.
정적 메서드에서는 개체 호출이 필요하지 않으므로 정적 메서드에서는 의사 변수 $this를 사용할 수 없습니다.
객체는 -> 연산자를 통해 정적 속성에 액세스할 수 없습니다.
정적이 아닌 메서드를 정적으로 호출하면 E_STRICT 수준 오류가 발생합니다.
다른 모든 PHP 정적 변수와 마찬가지로 정적 속성은 표현식이 아닌 리터럴이나 상수로만 초기화할 수 있습니다. 따라서 정적 속성은 정수 또는 배열로 초기화될 수 있지만 다른 변수나 함수 반환 값으로 초기화될 수 없으며 개체를 가리킬 수도 없습니다.
예제 #1 정적 속성 예
class Foo { public static $my_static = 'foo'; public function staticValue(){ return self::$my_static; } } class Bar extends Foo { public function fooStatic(){ return parent::$my_static; } } print Foo::$my_static.'<br>'; $foo = new Foo(); print $foo->staticValue().'<br>'; print $foo->my_static.'<br>'; print $foo::$my_static.'<br>'; $classname = 'Foo'; print $classname::$my_static; print Bar::$my_static.'<br>'; $bar = new Bar(); print $bar->fooStatic().'<br>';