변수의 사용은 변수에 고정되지 않고 변경되는 값을 담아 이용하기도 하고 또 담긴 값을 여러곳에서 사용하기 위해서 사용하게 될 것 입니다.
$variable = '철수';
어떠한 입력에 의해 $variable 라는 변수에 '철수'라는 문자열이 대입이 되었습니다. 물론 저렇게 코드 자체에 '철수' 라고 넣는 경우는 드물겠죠.
$variable = $GET['name'];
이런식으로 사용자가 이름을 입력한 값을 대입하게 되는게 현실적인 코드 일 것 입니다.
어찌 되었던 $variable = '철수'; 라는 변수가 값을 가지고 있을때 이 변수를 이용할 수 있는 부분이 함수를 사용할 경우 함수 안과 밖에서 사용이 될 수도 있고 사용이 되지 않을 수 있습니다.
$variable = '철수';
function name() {
print '나의 이름은 ' . $variable . '입니다.';
}
name();
함수를 호출해서 실행을 하더라도
철수라는 값이 담긴 변수가 사용되서 출력이 되지 않습니다.
나의 이름은 입니다. 라고 출력이 되고 말죠.
이유는 함수 밖의 변수는 함수 안에서 사용이 되지 않습니다. 이런 함수 밖의 변수를 전역변수라고 부릅니다.
function name() {
$variable = '철수';
print '나의 이름은 ' . $variable . '입니다.';
}
name();
이렇게 함수 안에 변수가 위치한다면 해당 변수가 사용이 가능해집니다. 이런 경우 로컬변수(지역변수) 라고 부릅니다.
저 함수가 호출이 되면
나의 이름은 철수입니다. 이렇게 변수가 사용되어 출력이 되는 것이죠.
함수 안에서 함수 밖의 전역변수에 접근하는 방법은 2가지 방법이 있습니다.
$variable = '철수';
function name() {
print '나의 이름은 ' . $GLOBALS['variable'] . '입니다.';
}
name();
$GLOBALS['variable'] 이렇게 $GLOBALS 배열변수 안의 원소명의 전역변수가 사용이 가능해 집니다.
$variable 전역변수가 함수 안에서 사용이 가능해 지는 것 입니다.
위와 같이 전역변수에 접근하도록 하면 함수를 호출하면
나의 이름은 철수입니다. 라고 출력이 되는 것이죠.
또 다른 한가지 방법은 함수 내에서 global 을 사용하는 것 입니다.
$variable = '철수';
function name() {
global $variable;
print '나의 이름은 ' . $variable . '입니다.';
}
name();
global $variable; 이라고 적어주면 $variable 변수는 지역변수가 아닌 전역변수를 가리키게 됩니다.
마찬가지로 함수를 호출하면 변수가 잘 사용되어 출력이 됩니다.
나의 이름은 철수입니다. 이렇게 말이죠.
그런데 여기서 흥미로운 것 하나가 있습니다.
함수 내에서 global 을 사용해서 전역변수를 사용하게 한 후
해당 변수를 변경하게 되면 함수의 값이 새로 변경한 값으로 바뀌게 됩니다.
<?php
$variable = '철수';
function name() {
global $variable;
print '나의 이름은' . $variable . '입니다.';
$variable = '영희';
}
name();
print "<br>" . $variable;
전역변수 사용을 위해 global $variable; 을 해 준 후
전역변수를 사용해서 출력을 하고 난 후
함수 내에서 변수의 값을 바꾸게 되면 이 전역변수의 값이 바뀌게 됩니다.
나의 이름은철수입니다.
영희
함수 내에서 새롭게 $variable = '영희'; 로 값을 바꾼게 함수 밖의 전역변수에는 영향을 주지 않을 것 같지만 그렇지 않고 영향을 주게 되는 것입니다.
global $variable; 의 코드가 있어서 그렇습니다.
만약 이게 없었다면 함수 내에서만 바뀐 값이 적용되고 밖에서는 다시 원래의 값이 계속 사용되게 되는 것 입니다.