이전 글에서는 광역변수와 로컬변수에 대해서만 알아보았다.
이번 글은 로컬변수, 즉 지역변수에 사용할 수 있는 static 키워드에 대해 알아보자. ( 지역변수란 함수같이 한정된 곳에서만 사용할 수 있는 변수를 말한다. )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php function test() { static $a = 1; echo $a; ++$a; } test(); test(); test(); test(); test(); ?> | cs |
위의 코드에 test라는 함수를 생성하여 안에서 3행의 명령을 내렸다.
static키워드를 덧붙인 $a 변수를 1로 선언하고 바로 출력한 뒤 함수가 끝나기 직전에 1을 더한다.
그리고 10행부터 14행까지 이 함수를 5번 선언한다.
그래서 결과는
12345
가 된다.
하지만
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php function test() { $a = 1; echo $a; ++$a; } test(); test(); test(); test(); test(); ?> | cs |
위의 코드처럼 5행의 static키워드만 빼버리면 결과값은 어떻게 될까?
답은 바로
11111
이 된다.
static키워드가 빠지면 $a변수는 함수를 벗어나자마자 초기화되기 때문이다.
static과 global의 차이를 못느껴 헷갈려할수도 있겠다.
간단하게 풀이하자면
함수 안에서 선언한 변수들은 본래 함수 밖에서 사용이 불가능하다.
하지만 global은 함수 안에서 선언한 변수를 밖에서도 사용이 가능하게 하는 문법이다.
이에 반해 static은 함수 밖에서 사용할수는 없으나 함수가 끝나고 값이 초기화되지 않는다.