Loading

블로그채널

Search !

[PHP] 변수 global, static 키워드


지난번에는 변수의 개념과 그 범위에 대해서 알아 보았어요. global 변수는 지상세계에 비유할 수 있고

local 변수는 벙커에 비유할 수 있어요.

 

global 키워드

함수는 벙커 개념으로 함수 안 즉 벙커 안에서 만들어진 변수는 함수 안에서 사용할 수 있어요. 지상세계에서 사용할 수 없다는 이야기입니다. 지상 세계 global 변수와 벙커 안 local 변수는 서로 통신이 안되요. 벙커에서는 지상 세계 소식이 궁금할거예요. 지상 세계와 벙커를 연결시켜주는 매개체가 필요해요. 그 기능을 하는 것이 global 키워드예요. 함수(벙커)안에 global이라는 키워드를 사용하면 지상세계 변수를 함수(벙커)안에서 사용하겠다는 이야기예요.코드는 아래 사이트에서 참조하세요.

 

http://www.w3schools.com/php/php_variables.asp

 

[PHP] 변수 global, static 키워드

[PHP] 변수 global, static 키워드

 


 

$x = 5;
$y = 10;

function myTest() {
    $y = $x + $y;
    echo $y; // 출력값 0
}

myTest();
echo $y; // 출력값 10

 

 

global 키워드가 없었다면 변수 $y의 출력 결과는 10에서 변하지 않아요. 함수 안 $x값과 $y값은 아무런 값을 가지고 있지 않아요. 왜냐하면 지상 세계와 함수(벙커) 안는 연결되어 있지 않기 때문이예요.

함수(벙커) 안에서 아래와 같이 선언해요.


global $x, $y;
그러면 함수(벙커) 안에서 지상세계 변수 $x와 $y를 사용하겠다는 이야기예요.

 

$x = 5;
$y = 10;

function myTest() {
    global $x, $y;
    $y = $x + $y;
}

myTest();
echo $y; // outputs 15

 

위 코드는 함수 안 변수 $x, $y와 지상세계의 변수 $x, $y는 똑같은 공간이 되었어요.
    $y = $x + $y;
따라서 위 키코드는 5+10이므로 $y 값이 15가 되었어요.

 

$GLOBALS[index] 배열 사용
이번에는 살짝 어려운 개념이 나왔어요. 쉽게 설명하면 $GLOBALS[index]는 global 변수를 찾아주는 역할을 하는 배열이예요. 더 쉽게 이야기하면 $GLOBALS[index] index에 해당 global 변수를 넣어주면 글로벌 변수를 찾아준다는 이야기예요. 아래 코드는 이해하면 좋아요. 지금은 사용할 일이 없겠지만 남의 코드를 볼 때 유용하게 쓰일거예요.

 

$x = 5;
$y = 10;

function myTest() {
    $GLOBALS[´y´] = $GLOBALS[´x´] + $GLOBALS[´y´];
}

myTest();
echo $y; // outputs 15

 

 

static 키워드

카운트하는 프로그램을 만들고 싶어요. 함수를 호출할 때마다 0에서 1씩 증가되는 프로그램을 만들었어요. 그런데 결과는 000 세번 찍혔어요.

 

function myTest() {
    $x = 0;
    echo $x;
    $x++;
}

myTest(); // 출력 0
myTest(); // 출력 0
myTest(); // 출력 0


함수가 호출 될 때 새로운 변수 $x가 만들어져서 값이 0을 할당해요. 이 짓을 3번하고 있는 거예요.

변수 $x를 변하지 않게 고정(static)하고 싶어요. 그럴 때 static이라는 키워드를 사용해요. 그러면 함수 안에서 여러번 호출 할 때 변수$x값이 생성과 소멸을 반복하지 않아요. 함수 안에서 변수 $x를 모두 공유하는 개념이예요.

 

function myTest() {
    static $x = 0;
    echo $x;
    $x++;
}

myTest(); // 0 출력
myTest(); // 1 출력
myTest(); // 2 출력
echo $x // 0 출력

 

변수를 만들 때 static이라는 키워드를 사용하면 함수 안에서 값이 공유되는거예요. 위 코드를 출력하면 0120가 나와요. 마지막에 0이 출력된 이유는 함수 안에서 만들어진 $x값은 지상세계와 연결이 되지 않아요.

 

다음시간엔 무지 쉬워요. echo와 print에 대해 살펴볼 예정이예요. 읽어보신다고 수고 많으셨어요. 이해 안가시는 분은 질문 주시면 친절히 모시겠습니다.

 

[Copyright ⓒ 블로그채널 무단전재 및 재배포 금지]