클래스 상수(Class constant)
클래스 내에서만 사용하게 되는, 즉 클래스 스코프(class scope)를 갖게 되는 상수를 정의하여 사용할 수 있습니다. 따라서 클래스 상수는 클래스 내의 모든 메소드만이 접근할 수 있으며 클래스 외부에서는 접근할 수 없습니다.
그러나 메소드 내에서만 사용할 수 있는 지역 상수(local constant)는 제공되지 않습니다.
클래스 상수에 접근하기
클래스 내에서의 접근
1 2 3 4 5 6 7 8 9 10 11 12 |
define('FATAL','Main Fatal error\n'); class ErrorCodes { const FATAL = "Fatal error\n"; function print_fatal_error_codes() { print "FATAL = " . FATAL; } } /* Call the static function and move into the ErrorCodes scope */ ErrorCodes::print_fatal_error_codes(); |
이 소스를 실행하면 클래스 ErrorCodes 내에 정의된 클래스상수 FATAL의 값이 출력될 것입니다.
‘클래스명::클래스상수’를 이용한 접근
클래스명과 범위연산자(scope resolver) ‘::’를 이용하면 클래스 외부에서도 클래스 상수에 쉽게 접근할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 |
class foo { const hey = 'hello'; function printHey() { print hey; } } print foo::hey; foo::printHey(); |
접근자 self, parent, main 및 범위연산자 ‘::’를 이용한 접근
범위연산자 ‘::’와 ‘self’, ‘parent’, ‘main’ 키워드를 이용하여 서로 다른 스코프를 갖는 상수에 접근하여 보면 아래와 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
define('FATAL','Main Fatal error\n'); class ErrorBase { const FATAL = "Base Fatal error\n"; } class ErrorCodes extends ErrorBase { const FATAL = "Fatal error\n"; function print_fatal_error_codes() { print "FATAL = " . FATAL; print "self::FATAL = " . self::FATAL; print "parent::FATAL = " . parent::FATAL; print "main::FATAL = " . main::FATAL; } } /* Call the static function and move into the ErrorCodes scope */ ErrorCodes::print_fatal_error_codes(); |