PHP - 변수

1 minute read

변수

기본문법

  • 변수명은 $로 시작하고, $ 바로뒤로는 숫자로 시작할 수 없다.
  • $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: 부분을 가공해서 생성된다.

  • 넘어온 값은 문자열로 저장된다.

🔗original-link

Updated: