【PHP】「' '」と「" "」はどちらを使っても同じ？【超初心者の躓き】

独学でゼロからPHP学習を進めています。
現在は『入力フォームの確認画面』を作ることが目標です！
学習中の備忘録や、わからなくて調べたことをまとめていきます。

#文字列の括り方は２種類
PHPでのコード記述の方法のひとつに、変数に文字列を入れる場合には、
シングルクォーテーション「' '」とダブルクォーテーション「" "」の２種類を使用できると学びました。

『どうして２種類？どっちかに統一したらダメなの？』
超初心者なので、そんな風に考えてしまいました。。。

でも、実際にコードを書いて色々試したらきちんと意味がありましたので備考録として残しておきます！

##調べてわかったこと

**- シングルクォーテーション「' '」：文字列内に変数があった場合、「文字」と認識される**
**- ダブルクォーテーション「" "」：文字列内の変数があった場合、「変数内の値」に変換される**

【コード記述例】

```php
<?php
  $money = '100'; //変数名:moneyに「100」代入
  echo 'このリンゴは $money 円です'; //シングルクォーテーション使用
  echo '<br>'; //「改行」
  echo "このリンゴは $money 円です"; //ダブルクォーテーション使用
?>
```
【表示画面】

```html
  このリンゴは $money 円です
  このリンゴは 100 円です
```

シングルクォーテーションで変数を囲むと、変数名がそのまま表示されてしまいました。
一方、ダブルクォーテーションで変数を囲むと、きちんと変数の中の値に置き換えられて表示されています。
自分が意図する表示になるように、うまく使い分ける必要があるということですね！

蛇足で、「変数の中の値に置き換えられて」というのは『変数展開』と呼ぶことも覚えておきます。

#間違ったコードを書いて失敗してみた
上のコードを正しく書けなかった時の表示結果も残しておきます！
コードは極力コピペしないように書いているので、微妙な間違いを結構していました。

##書いたコードがうまく解釈されなくてエラーになった例
【間違ったコード①】　シングル（ダブル）クォーテーションの重複使用(？)をした

```php
<?php
  $money = '100'; //変数名:moneyに「100」代入
  echo 'このリンゴは $money 円'です'; //シングルクォーテーションの重複使用
?>
```

【間違ったコード②】　シングル（ダブル）クォーテーションの囲み忘れがあった

```php
<?php
  $money = '100'; //変数名:moneyに「100」代入
  echo 'このリンゴは $money 円'です; //シングルクォーテーションの囲み忘れ
?>
```

【表示結果①②】
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478743/e708dc01-353d-87f3-c973-c86b524ccec6.jpeg" width=50%>

##そもそも変数として認識されていない例
【間違ったコード③】　変数名の前後一方もしくは両方に半角スペースを忘れた
こちらはダブルクォーテーションを使用した時です。
どの部分が変数なのかを明確にして、書き間違いを減らすために半角スペースをつけるのですが、表示結果を見ると**「変数名の後ろに半角スペース」**は必須みたいです。
※試しにシングルクォーテーションを使用した場合は3行すべて文字列として表示されました。

```php
<?php
  $money = '100'; //変数名:moneyに「100」代入
  echo "このリンゴは $money 円です"; //$moneyの前後に半角スペース ○
  echo '<br>'; //「改行」
  echo "このリンゴは$money 円です"; //$moneyの前に半角スペース忘れ ✕
  echo '<br>'; //「改行」
  echo "このリンゴは$money円です"; //$moneyの前後両方に半角スペース忘れ ✕
  echo '<br>'; //「改行」
  echo "このリンゴは $money円です"; //$moneyの後ろに半角スペース忘れ  ✕
?>
```
【表示結果③】

```html
  このリンゴは 100 円です
  このリンゴは100 円です
  このリンゴは
  このリンゴは 
```

【間違ったコード④】　変数名の前後一方もしくは両方に波括弧「｛ ｝」を忘れた
変数を明確にするための方法は、半角スペースの他に波括弧「｛ ｝」を使う方法もあります。
先程の間違ったコード③の半角スペースを波括弧にしたら表示結果が変わりました！

```php
<?php
  $money = '100'; //変数名:moneyに「100」代入
  echo "このリンゴは{$money}円です"; //$moneyの前後に波括弧あり ○
  echo '<br>'; //「改行」
  echo "このリンゴは$money}円です"; //$moneyの前に波括弧忘れ ✕
  echo '<br>'; //「改行」
  echo "このリンゴは$money円です"; //$moneyの前後両方に波括弧忘れ ✕
  echo '<br>'; //「改行」
  echo "このリンゴは{$money円です"; //$moneyの後ろに波括弧忘れ ✕  
?>
```
【表示結果④】
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478743/e708dc01-353d-87f3-c973-c86b524ccec6.jpeg" width=50%>

・・・どれが悪かったんでしょう?
原始的に、一行ずつコメントにする→表示テストを繰り返しました。
そうしたら、以下のパターンでのみ表示が確認できました。

```php
<?php
  $money = '100'; //変数名:moneyに「100」代入
  echo "このリンゴは{$money}円です"; //$moneyの前後に波括弧あり ○
  echo '<br>'; //「改行」
  echo "このリンゴは$money}円です"; //$moneyの前に波括弧忘れ ✕
  echo '<br>'; //「改行」
  echo "このリンゴは$money円です"; //$moneyの前後両方に波括弧忘れ ✕
  echo '<br>'; //「改行」
  //echo "このリンゴは{$money円です"; //$moneyの後ろに波括弧忘れ をコメント
?>
```

```html
  このリンゴは100円です
  このリンゴは100}円です
  このリンゴは
```
どうやら、変数名の後ろに波括弧をつけ忘れたことで、コードがうまく解釈されなかったようです。
ということで**「変数名の前後両方に波括弧」**した場合のみ、意図する表示が可能でした。


#まとめ
今回は、文字列の括り方として「' '」と「" "」はどちらを使っても問題がないのではないか？を実際にコードを書きながら検証しました。

どちらにもしっかり意味があり、**使い分けは「変数内の値を表示したいのかどうか（変数展開したいのか）」で考える**と良いみたいです。
今は簡単なコードだけしか書けないのですが、今後どこかで役に立てばと思います。

また、コードを微妙に間違えたらどういった表示になるのかというのも試しました。
やぱり相手はパソコンですね！本当にちょっとしたことで結果が全く変わってくるのは、検証していて面白かったです。
Qiitaでコードを書くと、関数や文字列などは色を変えて教えてくれるので間違いに気づきやすいですが、メモ帳等でプログラミングをする場合もあるはずなので、正しいコードが書けるように今後も勉強していきたいと思います。


最後まで読んでいただき、ありがとうございました！