클래스 상수
동일하고 변경 불가능한 상태로 유지되는 클래스별로 상수를 정의하는 것이 가능합니다. 클래스 상수의 기본 가시성은 public
입니다.
메모: 클래스 상수는 자식 클래스에 의해 재정의될 수 있습니다. PHP 8.1.0부터 클래스 상수는 final로 정의된 자식 클래스에서 재정의할 수 없습니다.
인터페이스에 상수
가 있을 수도 있습니다. 예제는 인터페이스 문서를 참조하십시오.
변수를 사용하여 클래스를 참조할 수 있습니다. 변수의 값은 키워드가 될 수 없습니다(예: self
, parent
및 static
).
클래스 상수는 각 클래스 인스턴스가 아니라 클래스당 한 번 할당됩니다.
예제 #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부터 클래스 상수에 가시성 수정자가 허용됩니다.