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, parentstatic).

예제 #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