메뉴 건너뛰기

프로그램언어

?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
PHP의 변수 소개를 보면 나오는 부분이지만 많은 분들이 모르고 지나치는 경우가 많습니다. 그중 하나는 유동변수 입니다.
유동변수란 변수명을 정해두지 않고 변경이 가능한 변수를 뜻합니다. 변수 뿐만 아니라 함수도 마찬가지로 응용할 수 있습니다.


일반적인 변수 사용예
$var = "test";
echo $var
;
test
위 코드는 일반적인 변수의 사용예 입니다. 변수명은 'var'가 되고 그 값에는 'test'가 들어갑니다. 출력 결과는 당연히 'test'가 나옵니다.


유동변수의 예
$var1 = "test variable 1";
$var2
= "test variable 2";
 
for ($i = 1; $i <= 2; $i++) {
    echo $
{'var'. $i} .'<br>';
}
test variable 1
test variable 2
이와 같이 변수명 작성시 { } 를 이용하여 작성하는 것을 볼수 있습니다.
{ } 안의 내용을 보면 'var' 라는 문자열과 변수 $i'문자열 결합' 하는 것이란 걸 알수 있습니다. 즉, 문자열 결합을 통해 'var1' 이라는 문자가 만들어 집니다.


유동변수의 다른 표현 방법
$var_name = 'var';
$var
= 'test';
echo $$var_name
;
test
여기서는 $var_name 이라는 변수에 'var' 라는 문자열을 담았습니다.
$를 두번 사용해서 $$var_name 하는 경우 ${$var_name} 과 같은 결과를 볼 수 있습니다.

값을 입력하는 경우도 마찬가지 입니다.
$var_name = 'var';
$
{$var_name} = 'test variable 1';
echo $var
;



그렇다면 변수만 가능한 것일까?
그렇지 않습니다. 함수에도 얼마든지 사용할 수 있습니다. 함수에 사용할 때에는 헷갈릴 수도 있으나 변수와 함수의 규칙을 이해하면 그리 어렵지 않습니다.

변수는 기본적으로 $[a-zA-Z_][a-zA-Z0-9_]* 의 형식으로 작성하도록 되어 있습니다. ($로 시작하고, 첫글자는 반드시 영문이거나 _로 시작하며, 숫자와 영문과 _ 의 조합, 정확히는 $[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)
즉, 기본적으로 $가 하나 붙게 되니 함수에 사용할 때와는 달리 $가 하나 적게 됩니다.
(그러나 변수 안에 유동변수로 또 한겹을 더 쓰는 경우 $$가 두개가 됩니다.)


유동함수 사용 예
function test_func($v = '') {
    echo
"it's test function.". $v;
}
 
$var_name
= 'test_func';
echo $var_name .
'<br>';
echo $var_name
() .'<br>';
echo $var_name
('value!');
test_func
it's test function.
it's test function.value!
세가지 각기 다르게 출력을 해봤는데요, 왜 저런 결과가 나오는지 짐작 하시겠나요? :)
첫번째 echo 에서는 일반변수 형식으로 $var_name 을 출력했습니다.
두번째, 세번째는 변수명 뒤에 () 를 붙여줌으로서 유동함수라는 것을 표시하고 있는 것이죠.


변수에 담긴 함수명의 2중 호출
function test() {
    echo
"it's test function.";
}
 
$func_name
= 'test';
$func
= 'func_name';
$$func
();
it's test function.
이 예제는 좀 복잡한데, 함수명을 갖고 있는 변수그 변수를 갖고 있는 변수를 유동변수 형식으로 불러서 다시 함수를 호출 하는 것입니다. 사실 이렇게까지 쓰는 경우는 그다지 많지 않지만, 필요한 경우가 생기긴 합니다.


그렇다면 함수명에 숫자가 들어가서 반복되는 경우는 어떻게 만들까요?

답은 간단합니다.
function test_1($v = '') {
    echo
"it's test function. ". $v;
}
function test_2($v = '') {
    echo
"second function. ". $v;
}

$var_name
= 'test_';
for ($i = 1; $i <= 2; $i++) {
    $func
= $var_name.$i;
    echo $func
($i) .'<br />';
}


임시 변수에 문자열 결합을 통해 함수명을 만들고 사용하면 됩니다.
주의 할점은 함수에 ${$var}() 형식으로는 사용할 수 없습니다.


함수까지 유동함수를 써봤는데 그렇다면 클래스는 어떨까요? :)
클래스 또한 마찬가지로 사용하면 됩니다.

class Test {
   
function show($v) {
        echo $v
." showtime!<br />";
   
}
}
 
$class_name
= 'Test';
$t
= new $class_name;
$t
->show("it's");
 
$method_name
= 'show';
$t
->$method_name("WoW");
it's showtime!
WoW showtime!


사실 이렇게 프로그래밍 할 수 있다는 것이 PHP의 장점이자 단점입니다. 다른 언어에서는 지원되지 않는 독특한 문법이죠.

그러나 편하다고 잘못 쓰면 오히려 보안상 큰 헛점을 만들게 됩니다. 또한 너무 남용하는 것은 코드 분석 및 유지에 어려울 수 있습니다.

- 사용하게 될 때에는 꼭 필요한 곳에만 적절하게 사용하고,
- HTML 폼에서 값을 받는 경우 유동변수가 아닌 배열을 사용하는 것이 좋습니다.
- 마찬가지로 GET 방식으로 값을 받을때 또한 유동변수 보다는 $_GET 변수를 사용하여 처리하는 것이 좋습니다.

List of Articles
번호 제목 날짜 조회 수
207 PHP XML 문서파싱 (SAX 방식 , DOM 방식) file 2018.10.26 704
206 PHP split()와 explode()의 차이점 2018.10.26 699
205 PHP eregi가 빠를까, strpos가 빠를까? 2018.10.26 713
204 PHP 확장 모듈을 이용한 C 라이브러리 사용 2018.10.26 709
203 자바스크립트 이스케이프 문자열을 PHP로 디코딩 하기 2018.10.26 676
202 이미지 땡겨와서 출력하기 2018.09.27 1152
201 DB 연동 4단 셀렉트 박스 2018.09.27 1184
200 PHP에서의 대칭 암호화/복호화 ― 간단한 예제에서 DB 입/출력까지 2018.09.14 587
199 PHP에서 자료, 데이터의 타입을 확인하는 방법, gettype() 2018.08.29 572
198 PHP에서 모든 세션 정보를 화면에 출력하는 방법 2018.08.29 576
197 한글이 깨져서 나올 때 - iconv 2018.08.29 814
196 날짜/시간함수 정리 2018.08.29 608
195 웹서버조회 소스 2018.07.24 1246
194 헤더이용 다운로드 받을시 바로열기부분 소스 2018.07.24 2043
193 키를 이용한 암호화/복호화 함수입니다. 2018.07.24 1491
192 MySQL테이블의 내용을 엑셀파일(xls)로 다운로드 하기 2018.07.24 1401
191 날짜계산 몇일까지.. [ ex)4 일전 new 표시 ] 2018.07.24 1154
190 게시판 내용 숨김 클릭시 내용 출력 [ 참고 ] 2018.07.24 1273
189 마우스 오버시 사진변환, 파일에러시 대체이미지 적용(소스일부) 2018.07.24 1262
188 PHP 소스코드 인코딩(암호화)하기 2018.07.19 1665
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 13 Next
/ 13

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved