static 키워드
static 키워드 (Static Keyword)
이 페이지에서는 static 키워드로 정적 메서드와 정적 프로퍼티를 정의하는 방법을 알아봐요. static은 정적 변수 정의, 정적 익명 함수 정의, 늦은 정적 바인딩에도 쓰이니 그 의미들을 함께 참고하세요.
본문
Tip
이 페이지는
static키워드로 정적 메서드와 프로퍼티를 정의하는 방법을 설명합니다.static은 정적 변수 정의, 정적 익명 함수 정의, 그리고 늦은 정적 바인딩(late static bindings) 에도 사용돼요. 그 의미들에 대한 정보는 해당 페이지들을 참고하세요.
클래스 프로퍼티나 메서드를 static으로 선언하면 클래스를 인스턴스화하지 않고도 접근할 수 있어요. 인스턴스화된 클래스 객체 안에서도 정적으로 접근할 수 있습니다.
static 메서드 (Static methods)
static 메서드는 객체 인스턴스를 만들지 않고도 호출할 수 있기 때문에, static으로 선언된 메서드 안에서는 의사 변수 $this를 사용할 수 없어요.
Warning
non-static 메서드를 정적으로 호출하면
Error가 발생합니다.PHP 8.0.0 이전에는 non-static 메서드를 정적으로 호출하는 것이 deprecated 처리되어
E_DEPRECATED경고를 발생시켰어요.
예제 #1 static 메서드 예제
<?php
class Foo {
public static function aStaticMethod() {
// ...
}
}
Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod();
?>
static 프로퍼티 (Static properties)
static 프로퍼티는 스코프 해석 연산자(Scope Resolution Operator)(::)로 접근하며, 객체 연산자(->)로는 접근할 수 없어요.
변수를 사용해서 클래스를 참조하는 것도 가능합니다. 단, 변수의 값은 키워드(예: self, parent, static)가 될 수 없어요.
예제 #2 static 프로퍼티 예제
<?php
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 . "\n";
$foo = new Foo();
print $foo->staticValue() . "\n";
print $foo->my_static . "\n"; // Undefined "Property" my_static
print $foo::$my_static . "\n";
$classname = 'Foo';
print $classname::$my_static . "\n";
print Bar::$my_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";
?>
PHP 8에서 위 예제의 출력은 다음과 유사합니다.
foo
foo
Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23
Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23
foo
foo
foo
foo