PHP의 변수에 대하여 알아봅니다.
PHP 변수
PHP에서 변수란, 어떤 값을 기록해 둘 수 있는 공간(메모리)에 이름을 붙여 둔 것이다. $변수명
과 같은 형식으로 정의하며, 대입연산자(=)를 사용하여 값을 할당할 수 있다.
PHP 변수 규칙
PHP에서 변수명은 아래에서 제시하는 변수명 규칙을 따르며, 이를 어긴다면 오류가 발생한다.
- 변수명은 반드시
$
(달러표시)로 시작해야 한다. - 변수명은 적어도 하나 이상의 문자를 가져야 한다.
$
표시 다음에 오는 첫 번째 문자는 알파벳이거나_
(언더바)여야 한다. 이후에는 알파벳, 언더바 또는 숫자가 가능하다.$
와_
를 제외한 모든 특수문자와 빈칸은 변수명에 포함되면 안된다.
또한, 기존의 프로그래머들이 관행적으로 사용해오던 규칙들도 있다. 이러한 규칙은 PHP 코딩을 좀 더 일관성있고, 가독성있게 해주지만 지키지 않더라도 오류를 발생시키진 않는다.
- 변수명에는 소문자를 사용하도록 하자(상수와 구분된다).
- 합성어로 만들어진 변수명은 단어간 구분에
_
를 사용하자.
$name //유효한 변수선언
$nick_name //유효한 변수선언
nick_name //달러표시로 시작하지 않아 유효하지 않음
$nick-name //특수문자사용으로 유효하지 않음
$nick_name more //빈칸이 포함되어 유효하지 않음
$this //$this는 특수 변수로, 할당할 수 없어 유효하지 않음
변수를 표현식으로 지정할때에 원래 표현식의 모든 값이 목표 변수로 복사된다. 즉, 어떤 변수 값을 다른 변수로 지정한 후에, 그 변수중 어떤 하나를 변경하는 것이 다른 변수에 영향을 미치지 못한다.
또한, PHP에서는 참조에 의한 지정이 가능한데 새로운 변수가 원래 변수를 참조하여 새 변수의 변경은 원래 변수에 영향을 미치고, 그 반대도 가능하다. 참조에 의한 지정을 위해서는, 변수의 시작부분에 &
(엠퍼센트)를 덧붙이면 된다.
PHP의 대/소문자 구분
PHP는 대부분 대/소문자를 구분하지 않기에 이를 혼용하지 않는 것으로 일관성을 유지하는 것이 좋다. 변수는 특별히 대/소문자를 구분하므로 $email 과 $EMAIL은 서로 다른 변수로 취급한다.
변수의 종류
변수에는 직접 이름을 짓고 용도에 따라 만들어 사용하는 사용자 변수와 미리 정의된 변수인 슈퍼 전역 변수가 있다.
사용자 변수
사용자 변수는 식별자에 $
기호를 붙여서 필요에 따라 사용할 수 있다.
슈퍼 전역 변수
프로그램 어디서든 해당 이름을 통해 접근이 가능하며, 웹서버의 설정값이나 서버 시스템의 환경, 사용자의 입력과 관련한 변수들이 지정되어 있고 인위적으로 값을 수정하거나 일반 변수로 사용할 수 없다.
변수명 | 설명 |
---|---|
$_GET | GET 방식으로 넘어온 변수의 배열 |
$_POST | POST 방식으로 넘어온 변수의 배열 |
$_COOKIE | 쿠키 변수의 배열 |
$_FILES | 파일 업로드시 파일 정보 변수의 배열 |
$_SESSION | 세션 변수의 배열 |
$_SERVER | 웹 서버와 PHP 환경에서의 환경 변수 배열 |
$_ENV | 서버 시스템의 환경 변수 배열 |
$_REQUEST | 사용자가 입력한 변수의 배열 |
슈퍼 전역 변수는 모두 배열로 되어 있기 때문에 $_ENV['OS']
와 같은 방법으로 변수에 접근할 수 있다.
PHP 변수의 범위
변수의 범위란 특정 변수를 사용할 수 있는 구간을 말하며, 일정 영역에서만 적용되는 변수를 지역 변수, 어느 영역이든 사용 가능한 변수를 전역 변수라고 한다.
<?php
$a = 1;
function test() {
echo $a;
}
test(); //출력안됨
function test2() {
global $a;
echo $a;
}
test2(); //1 출력
function test3() {
static $b = 0;
echo $b;
$b++;
}
test3(); //0 출력
test3(); //1 출력
test3(); //2 출력
inclued 'b.php'; //$a는 b.php 파일에서도 유효하다.
?>
- 전역 변수는 스크립트 내에서 정의된 변수로 스크립트 내에서 사용할 수 있지만 함수 안에서는 사용할 수 없다.
- 슈퍼 전역 변수는 스크립트 전역에서 사용할 수 있다.
- 함수 안에서 정의된 변수는 지역 변수로서 함수 내에서만 사용할 수 있다.
- 함수 안에서 전역으로 정의된 변수는 함수 밖에서 사용할 수 없지만 매 사용 시마다 값이 저장되어 다음에 사용할 수 있다.
- 함수 안에서 사용된 변수는 함수가 끝나면 삭제된다.
- 함수 안에서 사용된 변수의 값을 유지하기 위해서 static 키워드를 사용한 정적 변수로 선언할 수 있다.
- 함수 외부에서 선언된 변수를 함수 내부에서 사용하려면 global로 선언해야 한다.
- 변수의 유효영역은 include 되거나 required 된 파일로도 확장된다.
PHP 자료형
PHP는 8가지의 기본 자료형을 지원한다. 즉, 아래의 8가지 자료형중에 하나가 변수를 선언할때 할당되는 데이터에 따라 자료형이 결정된다(임의로 자료형을 변환시킬수 있는 함수들도 제공됨). 각각의 자료형들은 미리 부여된 크기를 가지고 있어 메모리를 효율적으로 사용할 수 있게 해준다.
또한, NULL 이라는 특수한 데이터도 저장할 수 있으며, 이는 아무런 값도 지니지 않음을 의미한다. 데이터가 할당되지 않은 변수는 NULL로 간주하게 된다.
진리값(boolean)
boolean(불린) 형은 진리값,논리값 등으로 불리며, 참(True)과 거짓(False) 두 가지 값을 표현한다. PHP에서 거짓은 0을 뜻하고 0 이 아닌 다른 모두 값은 참을 뜻한다.
실제로 1bit의 메모리 공간을 차지하나 지나친 공간절약보다 효율성을 우선시하여 1Byte의 공간을 사용한다.
<?php
$has_lover = FALSE;
?>
명시적으로 진리값으로 변환시키기 위해서는 (bool) 또는 (boolean)을 사용하며, 아래의 값들은 FALSE로 간주된다.
- 진리값 FALSE
- 정수 0
- 실수 0.0
- 빈 문자열("")과 문자열 "0"
- 요소를 가지지 않는 배열
- 멤버 변수를 가지지 않는 객체(PHP 4 에서만)
- 특별한 타입 NULL(unset 변수 포함)
- 빈 태그로부터 만들어진 SimpleXML 객체
정수(Integer)
정수를 표현하기 위해서 4Byte의 메모리 공간을 부여하며, 이는 0~4294967295 사이의 수와 -2147483648~2147483647 사이의 수를 표현한다. 총 32개의 bit 중에서 첫 번째 bit를 부호 bit로 사용하여 0일때 양수, 1일때 음수로 표현하기 때문에 실제 숫자는 31개의 bit로 표현하는 것이다.
<?php
$a = 1234; // 10진수
$a = -123; // 음수
$a = 0123; // 8진수
$a = 0x1A; // 16진수
$a = 0b11111111; // 2진수
?>
명시적으로 정수값으로 변환시키기 위해서는 (int) 사용한다.
부동소수점(floating point numbers)
실수를 표현하면서 부동소수점 방식을 사용하는 수를 의미한다. PHP에서는 실수를 표현하기 위해서 8Byte의 공간을 사용하며, 소수점 이하 14자리까지의 정밀도를 제공한다(floats, doubles, real numbers 라고도 불림).
<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>
부동소수점은 서로 같은지 비교하는 등의 작업은 언제나 오류의 소지를 가지므로 되도록 사용하지 않는 것이 좋다.
문자열(string)
문자들을 표현할때 사용하며, 메모리 공간의 제약이 없다. 즉, 문자열의 길이에 상관없이 제한 없는 문자열을 지원한다.
문자열은 큰따옴표("), 작은따옴표('), 히어닥문법(Heredoc), 나우닥문법(Nowdoc)을 이용하여 할당할 수 있다. 관련하여 자세한 설명은 PHP 문자열에서 따로 다루기로 한다.
배열(array)
배열은 키(key)와 값(value)으로 이루어지며, 키는 정수 또는 문자열중에 하나이고, 값은 모든 자료형이 될 수 있다.
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
);
// as of PHP 5.4
$array = [
"foo" => "bar",
"bar" => "foo",
];
?>
리소스(resources)
리소스는 파일이나 데이터베이스 그리고 이미지 작업과 같은 외부적인 자원을 나타내는데 사용하는 자료형으로, 다른 값으로 변환이 불가능하다. 또한 자동으로 해제되기 때문에 수동으로 메모리를 해제하지 않아도 된다.
NULL
NULL 값은 변수에 값이 없음을 표현하는 특별한 값이며, 오직 null 타입의 값으로만 가능하다. 변수에 아직 아무런 값도 할당하지 않았을때나 상수로 NULL을 직접 할당했을때 그리고 unset 함수로 변수를 제거했을 때 해당 값을 NULL 이라고 한다.
<?php
$var = NULL;
?>
객체
객체는 다른 페이지에서 다룬다.
PHP 변수 처리 함수
변수에 할당된 값들을 활용해 여러가지 정보를 처리할 수 있는 함수들이 존재한다.
Variable handling 함수 목록을 참고하도록 하자.