웹마스터 팁

변수

기초

변수란 어떤 값을 저장할 수 있는 공간 정도로 생각하면 됩니다. $변수명 = 값 형식으로 정의하여 사용하면 됩니다. PHP 변수는 앞에 꼭 $를 붙여야 합니다. 이때 같음표시(=)는 우리가 흔히 사용하는 양쪽이 같다는 의미로 쓰인 것이 아니고요. 오른쪽의 값을 왼쪽에 넣으라는 뜻으로 쓰입니다. 이를 대입연산자라 합니다.

$a = 10;
$b = 5;
$c = $a + $b;
echo $c;

위 코드에서 $a라는 변수에는 10이 들어있고, $b라는 변수에는 5가 들어있기 때문에 $a와 $b의 합인 $c에는 15라는 값이 들어가 있을 것입니다. 실행결과 15라는 값이 출력되겠죠

데이터 형

변수가 가질 수 있는 데이터의 형식을 데이터 형이라고 하는데요. PHP는 다음 기본 데이터 형을 지원합니다.

졍수형 : 모든 숫자에 사용
실수형(double) : 실수에 사용
문자열 : 문자의 나열에 사용
불리언 : 참, 거짓에 사용
배열 : 같은 형의 여러 데이터를 저장
객체 : 클래스의 인스턴스를 저장

나머지는 쉽게 이해할 수 있을 것이라 보고요. 배열과 객체에 대한 설명은 후에 하겠습니다. 그 외에 NULL와 resource 타입이 있는데, NULL은 특별히 NULL값을 가지는 변수를 NULL 형이라고 부릅니다.

형 강도

대부분의 프로그래밍 언어에서 변수를 어떤 데이터 형으로 미리 선언한 후 그 데이터 형에 해당하는 값만 사용할 수 있는 것에 비해, PHP는 변수에 저장된 값에 따라 형이 결정됩니다.

$a = 0;
$b = 0.00;
$a = 'Hello';

위 코드에서 $a에는 정수 0을 대입했기 때문에 $a는 정수형이 됩니다. 마찬가지로 $b는 실수(0.00)가 됩니다. 그리고 3번 줄에서 $a에 다시 'Hello'라는 문자열을 대입시켰는데 이 때 $a는 문자열이 됩니다. 이렇게 PHP는 변수에 저장된 값이 바뀔 때마다 그 데이터 형으로 변수 형이 바뀌게 됩니다.

데이터 형을 강제로 바꾸고 싶다면 C언어와 마찬가지로 변수 앞에 괄호를 넣고 그 안에 바꾸고 싶은 형을 적으면 됩니다.

$a = 0;
$b = (double)0;
$c = (string)$a;

위 코드에서 $a는 정수형, $b는 실수형, $c는 문자열이 되겠죠.

가변 변수

PHP는 가변 변수라는 것을 지원합니다.

$msg = '안녕하세요.';
echo "$msg<br>";

$varname = 'msg';
$$varname = '반갑습니다.';
echo '$msg<br>';

위 코드를 보세요. 2번 줄 실행 결과로 당연히 '안녕하세요'란 문자열이 출력되겠지요. 그럼 6번 줄 결과로 뭐가 출력될까요? 바로 한 줄 위를 보면 $$varname = '반갑습니다.';란 문장이 있습니다. $가 두번 쓰였죠. $varname에 'msg'란 값을 넣어두었으므로 $$varname은 $msg와 같은 뜻으로 쓰입니다.

그래서 $$varname = '반갑습니다.';란 문장은 $msg = '반갑습니다';와 같은 의미를 가지게 됩니다. $msg의 값은 '반갑습니다.'로 바뀌게 되고 6번 줄에서는 '반갑습니다'란 문자열이 출력되겠지요.

변수의 범위

변수의 범위란 스크립트 안에서 특정 변수를 사용할 수 있는 구간을 말합니다. PHP는 기본적으로 다음 여섯 가지 범위 규칙이 있습니다.

수퍼글로벌 변수는 스크립트 전역에서 사용할 수 있다.
한번 선언된 상수는 스크립트 전역에서 사용할 수 있다. 즉 함수의 안과 밖 모두에서 사용할 수 있다.
전역 변수는 스크립트 내에서 정의된 변수로 스크립트 내에서 사용할 수 있지만 함수 안에서는 사용할 수 없다.
함수 안에서 정의된 변수는 함수 내에서만 사용할 수 있다.
함수 안에서 전역으로 정의된 변수는 함수 밖에서 사용할 수 없지만 매 사용 시마다 값이 저장되어 다음에 사용할 수 있다. (뭔가 이상하군요...)
함수 안에서 사용된 변수는 함수가 끝나면 삭제된다.

수퍼글로벌이라는 특별한 범위의 변수는 다음과 같습니다.

$GLOBALS : 모든 전역 변수의 배열 (global 키워드처럼 함수 안에서 글로벌 변수에 접근할 수 있고, $GLOBALS['varname']처럼 접근할 수 있다.
$_SERVER : 서버 환경 변수의 배열
$_GET : GET 메소드로 넘어온 변수의 배열
$_POST : POST 메소드로 넘어온 변수의 배열
$_COOKIES : 쿠키 변수의 배열
$_FILES : 파일 업로드와 관련된 변수의 배열
$_ENV : 환경 변수의 배열
$_REQUEST : 사용자가 입력한 변수의 배열
$_SESSION : 세션 변수의 배열

폼 변수

PHP 스크립트에서 폼 필드 값은 PHP 변수처럼 접근할 수 있습니다. 예를 들어 myname이라는 텍스트 박스를 가진 폼이 PHP 파일로 값을 전달해 주면, 그 myname이라는 텍스트 박스의 값을 사용할 수 있다는 것입니다.

PHP 버전과 세팅에 따라 폼 데이터에 접근하는 방식은 세가지가 있습니다.

$myname // 짧은 스타일
$_POST['myname'] // 중간 스타일
$HTTP_POST_VARS['myname'] // 긴 스타일

짧은 스타일은 편하지만 register_global을 활성화 시켜야 합니다. 4.2.0 버전 이후로는 기본적으로 비활성화되어 있습니다. 짧은 스타일을 사용하면 변수를 정의할 필요가 없습니다. 그냥 바로 폼 필드의 이름을 변수로 사용하면 됩니다. 변수처럼 바로 접근하는 방식은 매우 편하지만 프로그램을 작성할 때 자신이 만든 변수와 섞이는 일이 발생할 수도 있습니다. 최근에는 인젝션해킹을 막기위해 대부분 서버에서 register_global 설정을 비활성화 시켜놓았습니다.

중간 스타일은 가장 추천되는 방식입니다. 4.1.0 이후부터 지원됩니다. $_POST, $_GET, $_REQUEST를 통해 접근할 수 있습니다. 폼 메소드가 POST로 되어 있을 때는 $_POST를 통해 접근할 수 있고, GET으로 되어 있을 때는 $_GET으로 접근할 수 있습니다. 그리고 POST, GET 상관없이 $_REQUEST를 통해 접근할 수도 있습니다.

긴 스타일은 잘 사용되지 않습니다. 어디에서나 사용할 수 있어 이식성이 높지만 성능을 높이기 위해 register_long_arrays를 비활성화 시킬 수도 있습니다.

상수

변수와 달리 값이 달라지지 않는 값을 사용하고 싶을 때가 있을 것입니다. 예를 들면 파이값을 3.14로 정의하고 사용할 수 있겠죠. 이렇게 한 번 값을 정하면 그 값을 바꿀 수 없는 것을 상수라고 합니다.

define('PI', 3.14);
echo PI;

위 코드와 같이 define 함수를 사용하여 상수를 정의하면 됩니다. 변수는 $를 붙이지만 상수는 상수의 이름만 적어주면 사용할 수 있습니다. 보통 상수의 이름을 지을 때는 대문자를 사용합니다. 이것은 관례로 꼭 그래야 하는 것은 아니지만 코드의 유지보수에 도움을 줍니다.

참고 : 성공적인 웹프로그래밍 PHP와 MySQL 제3판

제목 글쓴이 날짜
갑자기 관리자 페이지가 안보이거나 330 오류가 날 때는 이렇게 해결! [2] file 세라오빠 2011.04.13
(1.4.5 버전 이상) XE가 설치된 사이트 찾기 [1] SMaker 2011.04.17
댓글 쪽지 알림시 원본글 URL 설정 [1] unnumiya 2011.04.15
1.4.5.2로 업데이트 후 짧은 주소가 제대로 되지 않으실때... [8] file 라르게덴 2011.04.12
다솜플레이어창은 뜨는데 연결중에서 더이상 안넘어가요 탱7 2011.04.15
1.4.4.2부터 게시판 신규게시물 작성이 안되던 문제 [2] 운상유희 2011.03.25
업데이트 어떻게 해야 오류 없이 되나요? [1] 김농주 2011.04.12
텍스타일 카테고리 글목록수 수정 신군임니돠 2011.04.12
제로보드 XE - 오토셋에 설치하기 [11] file 차오이 2007.08.11
레이아웃에 소스추가해서 트래픽보기! [2] file 막시민 2011.03.07
회원가입폼 내멋대로 내맘대로 하기. [9] 지인짜 2010.08.04
[모바일] 모바일웹에서 Pc버전갔다가 다시 모바일버전으로 갈라면 [1] 푸름빠 2011.04.07
XE로 API 처리 완전 정복하기(2) [2] file 라르게덴 2009.11.03
P 개행처리를 BR처럼 Garon 2011.04.04
데이터이전 회원관련해서 알아야 할 사항 [2] 푸름빠 2011.04.03
[PHP 기초] 변수, 상수 [2] 난다날아 2011.03.24
관리자페이지 레이아웃에 게시판을 달아보자 [3] 푸름빠 2011.03.29
"현재 xe코어1.4.4.4버전에서는 익스플로어에서 페이지수정 등의 작업을 할때 에러가 자주 발생하곤 합니다." 유샤인 2011.03.29
디버그모드 변경하는 간단한 파이썬 스크립트 [4] mmx900 2008.04.23
모두 새로 코딩된 선우님의 새로운 레이아웃.... 유샤인 2011.03.28