상수는 변수처럼 자료 형태의 데이터를 저장할 수 있습니다.

하지만 상수는 변수와 달리 데이터를 한번 설정하면 절대 변하지 않는 값이 됩니다. 이 말은 한 번 값을 설정하면 다른 값으로 설정이 되지 않아 변질이라는 사태를 막을 수 있다는 이점이 생깁니다. 이를테면 URL 이나 비밀번호, ID 와 같은 민감한 정보가 변질되어 버리면 곤란한 일이 생겨 버리죠.

상수에는 "미리 정의된 상수"가 있고, 사용자가 정의한 상수가 있습니다. 사용자 상수는 define() 함수로 만들고, defined() 함수로 정의되었는지 확인합니다.

상수 이름에 정의되는 규칙은 변수명의 규칙에 벗어나지 않는 다면 자유롭습니다.


미리 정의된 상수

대표적으로 사용할 수 있는 "미리 정의된 상수"는 다음 표를 사용할 수 있습니다.

상수명 설 명
__FILE__ 파일의 전체경로와 파일명, 절대경로
__LINE__ 파일의 현재 줄 라인
__DIR__ dirname함수와 __FILE__상수는 동일한 기능을 함.
다만, 마지막에 슬레쉬가 없음 (PHP 5.3에 추가)
__FUNCTION__ 함수명을 표시 (PHP 5에 추가)
__CLASS__ 클레스명을 표시 (PHP 5에 추가)
__METHOD__ 클레스 메소드명을 표시 (PHP 5에 추가)
__NAMESPACE__ 이 상수는 컴파일 시에 정의됩니다. (PHP 5.3에 추가)
PHP_VERSION 서버에 설치된 PHP버전
PHP_OS PHP가 실행중인 OS의 이름
TRUE TRUE, 1을 표시
FALSE FALSE, 빈 값을 표시
E_ERROR 문법 오류가 아닌 복구가 불가능한 에러를 표시
E_WARNING PHP가 스크립트 실행에는 문제없으나 오류가 있음을 표시
E_PARSE 스크립트에서 문법적으로 잘못된 명령을 만난 경우 표시
E_NOTICE 에러는 아니지만 알릴 사항이 있음을 표시

<?php 
 echo __FILE__ . "<br/>\n"; // 결과: c:\Server\public_html\test.php 
 
 // 상수를 정의한 위치가 5 라인입니다. 
 echo __LINE__ . "<br/>\n"; // 결과: 5 
 
 // php 버전 
 echo PHP_VERSION . "<br/>\n"; // 결과: 5.2.13 
 echo PHP_OS . "<br/>\n"; // 결과: WINNT 
 echo TRUE . "<br/>\n"; // 결과: 1 
 echo FALSE . "<br/>\n"; // 결과:  

 // 함수명 상수 정의 
 function functionname(){ 
    echo __FUNCTION__; 
 } 
 functionname(); // 결과: functionname 

 // 클레스명 상수 정의 
 class classtest{ 
      var $test = __CLASS__; 
      function test(){ 
           echo $this->test; 
      } 
 } 
 $test = new classtest; 
 echo $test->test; // 결과: classtest 

 // 메쏘드명 상수 정의 
 class classtest{ 
      var $test = __METHOD__; 
      function test(){ 
           echo $this->test; 
      } 
 } 
 $test = new classtest; 

 echo $test->test; // 결과: classtest 
 ?>


define 함수

bool define ( string $name , mixed $value [, bool $case_insensitive= false ] ) (PHP 4, PHP 5)

첫 번째 인자는 상수 이름을 지정하고, 두 번째 인자는 상수 값을 지정합니다.

상수는 대소문자를 구분하기 때문에 이를 무시하려면 세 번째 인자에 true 로 설정하면 됩니다. 성공하면 true를, 실패하면 false를 반환합니다.

상수는 상수 이름 앞에 달러표시($)가 없는게 특징입니다. 상수는 전역변수처럼 함수나 클래스에서 global 없이 자유롭게 사용할 수 있으며 따옴표로 감싸줄 필요는 없습니다.

상수는 한 번 설정되면 재정의(변형)하거나 삭제할 수 없습니다. 상수 이름은 가능하다면 대문자로 작성하되 __로 시작하는 것을 권장하지 않습니다.

<?php 
 // 상수는 대소문자를 구분합니다. 
 define("VARTABLE", "안녕하세요. 하보니입니다."); 
 echo VARTABLE; // 결과: 안녕하세요. 하보니입니다. 
 echo VARTABLe; // 결과: VARTABLe 

 // 대소문자를 무시하려면 true를 입력합니다. 
 define("GREETING", "상수 테스트입니다.", true); 
 echo GREETING; // 결과: 상수 테스트입니다. 
 echo Greeting; // 결과: 상수 테스트입니다. 

 // constant함수로 상수 값을 출력하는 예입니다. 
 // 성공하면 상수값을, 실패하면 NULL를 반환합니다. 
 define("CONST", "constan함수로 상수 출력하기t", true); 
 echo constant("CONST"); // 결과: constan함수로 상수 출력하기 
 ?>

상수가 정의되었는지 확인하려면 defined 함수를 사용하면 됩니다.

<?php 
 define("CONST","상수가 올바로 정의되었습니다."); 

 if(defined("CONST")){ 
      echo CONST; 
 } 
 // 결과: 상수가 올바로 정의되었습니다. 
 ?>


get_defined_constants 함수 

array get_defined_constants ([ bool $categorize ] ) (PHP 4 >= 4.1.0, PHP 5)

현재 정의된 모든 상수의 이름과 값을 반환합니다.

여기에 사용자가 정의한 상수도 포함되며, categorize(PHP 5부터)에 true를 지정하여 키와 값을 배열로 반환 받을 수 있습니다.

<?php 
 define("MY_CONSTANT", "상수를 정의합니다."); 
 print_r(get_defined_constants(true)); 
  
 /* 
 결과:  
 Array 
 ( 
    [internal] => Array 
        ( 
            [E_ERROR] => 1 
            [E_WARNING] => 2 
            [E_PARSE] => 4 
            [E_NOTICE] => 8 
            [E_CORE_ERROR] => 16 
            [E_CORE_WARNING] => 32 
            [E_COMPILE_ERROR] => 64 
            [E_COMPILE_WARNING] => 128 
            [E_USER_ERROR] => 256 
            [E_USER_WARNING] => 512 
            [E_USER_NOTICE] => 1024 
            [E_ALL] => 2047 
            [TRUE] => 1 
        ) 
    [pcre] => Array 
        ( 
            [PREG_PATTERN_ORDER] => 1 
            [PREG_SET_ORDER] => 2 
            [PREG_OFFSET_CAPTURE] => 256 
            [PREG_SPLIT_NO_EMPTY] => 1 
            [PREG_SPLIT_DELIM_CAPTURE] => 2 
            [PREG_SPLIT_OFFSET_CAPTURE] => 4 
            [PREG_GREP_INVERT] => 1 
        ) 
    [user] => Array 
        ( 
            [MY_CONSTANT] => 상수를 정의합니다. 
        ) 
 ) 
 */ 
 ?>

다음은 categorize 에 지정하지 않았을 때의 예입니다.

<?php 
 define("MY_CONSTANT", "상수를 정의합니다."); 
 print_r(get_defined_constants()); 
  
 /* 
 결과:  
 Array 
 ( 
    [E_ERROR] => 1 
    [E_WARNING] => 2 
    [E_PARSE] => 4 
    [E_NOTICE] => 8 
    [E_CORE_ERROR] => 16 
    [E_CORE_WARNING] => 32 
    [E_COMPILE_ERROR] => 64 
    [E_COMPILE_WARNING] => 128 
    [E_USER_ERROR] => 256 
    [E_USER_WARNING] => 512 
    [E_USER_NOTICE] => 1024 
    [E_ALL] => 2047 
    [TRUE] => 1 
    . 
    . 
    생략 
    . 
    . 
    [MY_CONSTANT] => 상수를 정의합니다. 
 ) 
 */ 
 ?>

0 댓글