본문 바로가기

PHP/PHP Programming

[PHP] 상수의 정의

반응형

 상수는 변수와 마찬가지로 자료형태의 데이터를 저장할 수 있지만 $가 붙지 않습니다. 상수는 한번 정의되면 변경하거나 해제할 수 없고, 스칼라 데이터만 가질 수 있습니다.



  √ 상수 이름 앞에 달러표시($)가 없습니다.

  √ 상수는 전역변수처럼 함수나 클래스 내에서 사용할 수 있습니다.

  √ 상수는 변수의 유효범위 상관없이 어느 곳에서든 정의할 수 있습니다.

  √ 상수는 스칼라(boolean, integer, float, string) 값만 쓸 수 있습니다.

  √ 상수는 한 번 설정되면 재정의(변형)하거나 삭제할 수 없습니다.

  √ 상수 이름은 언더라인(_)으로 시작하길 권장하지 않습니다.

  √ 상수는 define함수로만 설정되고, defined 함수로 설정여부를 확인합니다.



 상수에는 "미리 정의된 상수"가 있는데, defined( ) 함수로 정의되었는지 확인이 가능합니다. 상수 이름에 정의되는 규칙에 벗어나지 않는다면 자유롭습니다.






■ 미리 정의된 상수


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


상수명

의 미

 __FILE__

 · 파일의 전체경로와 파일명, 절대경로

 __LINE__  · 파일의 현재 줄 라인
 __DIR__

 · dirname( ) 함수와 _FILE_ 상수는 동일하나 마지막에 슬래시가 없음. php5.3부터

 __FUNCTION__

 · 함수명을 표시. php5부터

 __CLASS__

 · 클래스 메소드 명을 표시. php5부터

 __METHOD__

 · 클래스 메소드 명을 표시. php5부터

 __NAMESPACE__

 · 이 상수는 컴파일 시에 정의됩니다. php5.3부터

 PHP_VERSION

 · 서버에 설치된 PHP버전

 PHP_OS
 · PHP가 실행중인 OS의 이름

 TRUE

 · TRUE (참), 1을 표시

 FALSE
 · FALSE (거짓), 빈 값을 표시

 E_RROR

 · 문법 오류가 아닌 복구가 불가능한 에러를 표시
 E_WARNING
 · PHP가 스크립트 실행에는 문제 없으나 오류가 있음을 표시

 E_PARSE

 · 스크립트에서 문법적으로 잘못도니 명령을 마난 경우 표시

 E_NOTICE

 · 에러는 아니지만 알리 사항이 있음을 표시


ex #01)

<?php
	echo __FILE__."
"; // 출력 : C:\Developer\Apache2.2\htdocs\ex01.php // 상수를 정의한 위치가 6라인 입니다. echo __LINE__."
"; // 출력 : 6 // PHP 버전 echo PHP_VERSION."
"; // 출력 : 5.2.13 echo PHP_OS."
"; // 출력 : WINT echo TRUE."
"; // 출력 : 1 echo FALSE."
"; // 출력 : // 함수명 상수 정의 function functionname() { echo __FUNCTION__; } functionname(); // 출력 : functionname // 클래스명 상수 정의 class classtest01 { var $test = __CLASS__; function test() { echo $this -> test; } } echo "
"; $test = new classtest01; echo $test -> test; // 출력 : classtest01 echo "
"; // 메소드명 상수 정의 class classtest02 { var $test = __METHOD__; function test() { echo $this -> test; } } $test = new classtest02; echo $test -> test; // 출력 : classtest02 ?>







■ define( ) 함수


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


 define( ) 함수로 사용자 상수를 만들 수 있습니다. 상수가 정의되었는 지 확인하려면 defined( ) 함수를 이용합니다.



  name 인수 : 상수 이름을 지정합니다.

  value 인수 : 상수 값을 지정합니다.

  case_insensitive 인수 : 대소문자를 무시하려면 TRUE 로 설정합니다.



ex #02)

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

	if(defined("CONST")) {

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



 defined( ) 함수로 상수가 정의되었는지 확인해 보겠습니다.


ex #03)

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

	if(defined("CONST")) {

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







■ get_defined_constants( ) 함수


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


 현재 정의된 모든 상수의 이름과 값을 반환합니다. 여기에 사용자가 정의한 상수도 포함됩니다.



  categorize 인수 : TRUE를 지정하여 키와 값을 배열로 반환 받을 수 있습니다. php5.0부터

 


ex #04)

<?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 인수에 설정하지 않았을 때의 결과입니다.



ex #05)

<?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] => 상수를 정의합니다.
			)
	*/
?>


반응형

'PHP > PHP Programming' 카테고리의 다른 글

[PHP] 세션 쿠키 설정 함수  (0) 2015.04.08
[PHP] 클래스의 기본문법  (3) 2015.04.07
[PHP] 가변변수  (0) 2015.03.29
[PHP] 정적변수  (0) 2015.03.29
[PHP] CGI 환경변수  (0) 2015.03.29