static 키워드
팁 이 페이지에서는 static
키워드를 사용하여 정적 메서드 및 속성을 정의하는 방법에 대해 설명합니다. static
키워드는 또한 정적 변수를 정의와 늦은 정적 바인딩에 사용될 수 있습니다. 각각의 static
이 의미하는 바는 문서를 참조하시기 바랍니다.
클래스 속성이나 메서드를 정적으로 선언하면 클래스를 인스턴스화할 필요 없이 액세스할 수 있습니다. 인스턴스화된 클래스 개체 내에서 정적으로 액세스할 수도 있습니다.
정적 메서드
정적 메서드는 생성된 개체의 인스턴스 없이 호출할 수 있으므로 의사 변수 $this는 정적으로 선언된 메서드 내에서 사용할 수 없습니다.
경고 비정적 메서드를 호출하면 정적으로 오류가 발생합니다.
PHP 8.0.0 이전에는 비정적 메서드를 정적으로 호출하는 것이 더 이상 사용되지 않으며 E_DEPRECATED
경고가 생성되었습니다.
예제 #1 정적 메서드 예제
<?php
class Foo {
public static function aStaticMethod() {
// ...
}
}
Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod();
?>
정적 속성
정적 속성은 범위 확인 연산자(::
)를 사용하여 접근하고 개체 연산자(->
)를 통해 접근할 수 없습니다.
변수를 사용하여 클래스를 참조할 수 있습니다. 변수의 값은 키워드가 될 수 없습니다(예: self
, parent
및 static
).
예제 #2 정적 속성 예
<?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