PHP - 변수
변수
기본문법
- 변수명은 $로 시작하고, $ 바로뒤로는 숫자로 시작할 수 없다.
- $this는 변수로 선언할 수 없다. (클래스 내부에서 사용되는 변수, 예약어다.)
- 변수 선언 형식
- Call By Value : 값을 변수에 넣는다. 다른 변수에서 값을 가져온다면, 그 값을 복사해서 넣는다.
- $x = 1;
$y = $x; -
$x 와 $y는 값은 같지만, 서로 다른 것이다., $y=2; 를 할 경우 $x 는 영향이 없다.
- Call By Reference : 변수에 값의 참조로 선언한다. 다른 변수에 선언된 똑같은 것을 지칭한다.
- $x = 1;
$y = & $x; -
$x 와 $y는 똑같은 것을 가르키며, $y=2; 를 할 경우 $x 도 2로 바뀐다.
- 변수가 초기화 되지 않으면 NULL 이다.
미리 정의된 변수
- $GLOBALS, $_SERVER ,$_POST,$_GET,$_REQUEST,$_COOKIE,$_SESSION 등을 말한다.
- 중요 값으로 PHP가 실행되면 자동으로 값이 생성되며, 몇몇은 CLI모드에서 사용할 수 없다.
- **php.ini 에서 register_globals on 으로 사용할 경우 아주 위험하다. **(수퍼 전역 변수의 값을 키값 기준으로 지역 변수로 바꿔 주는 것.)
-
꼭 off로 쓰기 바란다.
- 슈퍼 전역 변수 ( Superglobals )
- $GLOBALS, $_SERVER, $_GET, $_POST, $_FILES, $_COOKIE, $_SESSION, $_REQUEST, $_ENV 등을 말한다.
- 스코프에 상관 없이 어디서나 접근해서 사용할 수 있다.
변수 유효 영역
- 기본적으로 그 함수 안에서만 유효하다.
- 전역 변수는
global $x; // global 키워드로 전역 변수 $x를 사용함을 표시
echo $x;
처럼 선언해서, 함수 내에서도 전역 변수를 제어 및 사용할 수 있다. - echo $GLOBALS[‘x’];
로 사용해도 똑같은 효과 -
전역 변수를 쓰는건 별로 좋은 방법이 아니다. (낡고 유지보수가 어려운 코딩 법이다.)
- 슈표 전역 변수는 언제 어디서든지 제어 및 사용할 수 있다.
- 정적 변수는
static $x = 0; //static 키워드로 정젹 변수 선언언
$x++;
처럼 함수 내에서 선언하면 똑같은 함수를 부를 때마다 $x 의 값이 증가하게 된다.
즉, 그 함수 내에서 $x 는 함수에 종속된 값이된다.(계속 유지됨) - 별일 없다면 쓰지 말자, 쓸 때 없이 메모리에 값이 떠있게 된다.
- 제한적 사용이 필요하다면 사용하라!
가변 변수
- $x = ‘abc’;
- $$x = ‘abc’; //이렇게 사용하는 방법은 피하라.(동작은 할 것이다. 다만 알아보기 힘들고, 실수한것으로 보일 수도 있다.)
-
$abc = ‘abc’;
로 동작하게 된다. - ${$x} = ‘abc’; //필요하다면 이 표현식 처럼 사용하라.
-
$abc = ‘abc’;
로 동작 - 객체에서도 사용가능
- $obj->{$x} = ‘abc’;
-
$obj->abc = ‘abc’;
로 동작 - http://php.net/manual/kr/language.variables.variable.php
- 이곳에 웃긴 예제가 있다. 왜 그런지 한번 생각해보자.
외부에서오는 변수들
- $_GET
- get으로 넘어오는 값에 대한 연관 배열
-
요청 URL에서 queryString 부분을 가공해서 생성된다.
- $_POST
- post로 넘어오는 값에 대한 연관 배열
-
php://input 으로 입력된 값을 가공해서 생성된다.
- $_COOKIE
- 쿠키로 넘어오는 값에 대한 연관 배열
-
요청해더의 Cookie: 부분을 가공해서 생성된다.
- 넘어온 값은 문자열로 저장된다.