phpclass/객체모델2002. 12. 21. 15:20
클래스 상수(Class constant)
클래스 내에서만 사용하게 되는, 즉 클래스 스코프(class scope)를 갖게 되는 상수를 정의하여 사용할 수 있습니다. 따라서 클래스 상수는 클래스 내의 모든 메소드만이 접근할 수 있으며 클래스 외부에서는 접근할 수 없습니다.
그러나 메소드 내에서만 사용할 수 있는 지역 상수(local constant)는 제공되지 않습니다.
클래스 상수에 접근하기
클래스 내에서의 접근
[code php;gutter:false] <?php
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();
?> [/code]
이 소스를 실행하면 클래스 ErrorCodes 내에 정의된 클래스상수 FATAL의 값이 출력될 것입니다.
'클래스명::클래스상수'를 이용한 접근
클래스명과 범위연산자(scope resolver) '::'를 이용하면 클래스 외부에서도 클래스 상수에 쉽게 접근할 수 있습니다.
[code php;gutter:false] <?php
class foo {
const hey = 'hello';

function printHey() {
print hey;
}
}

print foo::hey;
foo::printHey();
?> [/code]
접근자 self, parent, main 및 범위연산자 '::'를 이용한 접근
범위연산자 '::'와 'self', 'parent', 'main' 키워드를 이용하여 서로 다른 스코프를 갖는 상수에 접근하여 보면 아래와 같습니다.
[code php;gutter:false] <?php
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();
?> [/code]

Posted by 방글24