공부하던 중에 더블 쿼터 내의 문자열에서 $_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 |