본문 바로가기

2021/web

php -'(싱글 쿼터)와 "(더블 쿼터), 그리고 중괄호

공부하던 중에 더블 쿼터 내의 문자열에서 $_POST['인덱스']를 중괄호로 감싸지 않으면 오류가 발생하기에 중괄호를 사용하는 이유가 궁금해져 찾아 보았다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
$a = "This is me.";
echo 'hello '.$a;
?>
<br>
 
<?php
echo 'hello $a'
?>
<br>
 
<?php
echo 'hello {$a}';
?>
<br>
// 싱글쿼터를 사용하면 문자열 내 변수들을 고려하지 않고 문자 그대로 출력한다.
// 중괄호를 사용하여도 치환되지 않음.
 
<?php
echo "hello $a";
?>
<br>
// 더블 쿼터를 사용하면 문자열 내 변수들을 고려하여 이를 변수 내 저장된 값으로 치환하여 출력한다.
 
<?php
echo "hello {$_GET['id']}";
?>
<br>
 
<?php
echo "hello {$a}";
?>
// 더블 쿼터 내에서 중괄호를 이용하면 변수를 더욱 명확하게 표현 가능.
cs

 

그런데 여기서 

echo "hello $a";

에서는 변수 $a에 중괄호를 사용하지 않아도 정상적으로 출력되는데

echo "hello $_GET['id']";

는 오류가 발생했고, echo "hello {$_GET['id']}"와 같이 중괄호를 사용해야만 정상적으로 출력되었다.

이러한 차이가 발생하는 이유가 궁금해졌다.

 

여러가지 시도를 해본 결과 $_GET['id']에서 문자열 인덱스인 id가 싱글 쿼터로 감싸져 있기 때문임을 알게 되었다. 쿼터가 중복해서 사용되었기 때문에 문제가 된 것이다.

즉 echo "$_GET[id]";이라고 하면 정상적으로 출력된다.

 

배열의 키값에 쿼터를 붙이지 않으면 php 내에서 자동으로 쿼터를 붙여주기 때문에 싱글 쿼터를 사용하지 않아도 실행되지만, 배열 변수를 출력할 때는 echo "{$_GET['id']}";의 형태를 사용하는 것이 권장된다고 한다.

'2021 > web' 카테고리의 다른 글

웹 스터디 4주차 - php & mysql(1)  (0) 2021.07.20
웹 스터디 3주차 - MySQL(1)  (0) 2021.07.15
웹 스터디 3주차 - php(2)  (0) 2021.07.06
웹 스터디 2주차 - php(1)  (0) 2021.01.17
웹 해킹 2주차 - XSS game 01  (0) 2021.01.17