클래스 상수

동일하고 변경 불가능한 상태로 유지되는 클래스별로 상수를 정의하는 것이 가능합니다. 클래스 상수의 기본 가시성은 public입니다.

메모: 클래스 상수는 자식 클래스에 의해 재정의될 수 있습니다. PHP 8.1.0부터 클래스 상수는 final로 정의된 자식 클래스에서 재정의할 수 없습니다.

인터페이스에 상수가 있을 수도 있습니다. 예제는 인터페이스 문서를 참조하십시오.

변수를 사용하여 클래스를 참조할 수 있습니다. 변수의 값은 키워드가 될 수 없습니다(예: self, parentstatic).

클래스 상수는 각 클래스 인스턴스가 아니라 클래스당 한 번 할당됩니다.

예제 #1 상수 정의 및 사용

                  
<?php
class MyClass
{
    const CONSTANT = 'constant value';

    function showConstant() {
        echo  self::CONSTANT . "\n";
    }
}

echo MyClass::CONSTANT . "\n";

$classname = "MyClass";
echo $classname::CONSTANT . "\n";

$class = new MyClass();
$class->showConstant();

echo $class::CONSTANT."\n";
?>
                  
                

특수 ::class 상수는 컴파일 타임에 정규화된 클래스 이름 확인을 허용하며, 이는 네임스페이스가 있는 클래스에 유용합니다.

예제 #2 네임스페이스 :: 클래스 예제

                  
<?php
namespace foo {
    class bar {
    }

    echo bar::class; // foo\bar
}
?>
                  
                

예제 #3 클래스 상수 표현식 예제

                  
<?php
const ONE = 1;
class foo {
    const TWO = ONE * 2;
    const THREE = ONE + self::TWO;
    const SENTENCE = 'The value of THREE is '.self::THREE;
}
?>
                  
                

예제 #4 PHP 7.1.0부터 클래스 상수 가시성 수정자

                  
<?php
class Foo {
    public const BAR = 'bar';
    private const BAZ = 'baz';
}
echo Foo::BAR, PHP_EOL;
echo Foo::BAZ, PHP_EOL;
?>
                  
                

PHP 7.1에서 위 예제의 출력:

bar

Fatal error: Uncaught Error: Cannot access private const Foo::BAZ in …
                

메모: PHP 7.1.0부터 클래스 상수에 가시성 수정자가 허용됩니다.