# 1 調査
echoやprintは一番初めに覚える命令だが、違いが判らずどちらでも問題ないと思っていた。シングルクォーテーションとダブルクォーテーションについても同じである。公式マニュアルで調べると、echo、printの解説は見つかったが、シングルクォーテーション、ダブルクォーテーションは見つからなかった。探し方をご存じの方は、教えて頂けたらと思います。
echo
print
#2 echoとprintについて
公式マニュアルによると、
- echo: 1 つ以上の文字列を出力する
- print: 文字列を出力する
となっていた。更に例文があり違いを理解できた。例文を少し変更し出力してみる。
<?php
echo 'flower', 'fruits', 'fish'; //flowerfruitsfish
?>
<?php
print 'flower', 'fruits', 'fish'; //Parse error
?>
echoは、複数の文字列をカンマで並べても、正しく出力した。しかしprintは、複数の文字列をカンマで並べるとエラーが発生することが分かった。個人的にはechoで今後学習を進めていくことにする。
#3 シングルクォーテーション ' とダブルクォーテーション " について
google検索してみた。
・ シングルクォーテーションは、変数をそのまま文字列で出力する。
・ ダブルクォーテーションは、変数を値で出力する。
ということが分かったが、こちらも例文の方が理解しやすい。
<?php
$a = 100;
$b = 'point';
echo 'My score is $a $b'; //My score is $a $b
echo "My score is $a $b"; //My score is 100 point
?>
上は変数が数値でも文字列でも、シングルクォーテーションの場合は、変数名がそのまま表示された。一方、ダブルクォーテーションは、変数が数値や文字列に変換された。配列を入れたらどうなるのだろうか。下で試してみる。
<?php
$a = [10,20,30];
$b = ['point','score'];
echo 'My score is $a $b'; //My score is $a $b
echo "My score is $a $b"; //Warning
?>
結果はダブルクォーテーションで、warningが出てしまった。そもそもecho は配列を出力できないのでこの結果は当然であった。シングルクォーテーションは、配列を意識することなく変数名をそのまま出力するだけなので問題なく実行できた。
シングルクォーテーションとダブルクォーテーションは連携して用いられる。
文字列の中でダブルクォーテーションを使用する場合、文字列はシングルクォーテーションで囲む。
逆に、文字列の中でシングルクォーテーションを使用する場合、文字列はダブルクォーテーションで囲む。これも例文の方がイメージを掴みやすい。
<?php
echo 'Today is a "beautiful" day.';//Today is a "beautiful" day.
echo "Today is a 'beautiful' day.";//Today is a 'beautiful' day.
?>
上のコードは、"beautiful"と、ダブルクォーテーションで囲んだ文字を含む文字列を作成する場合、文字列の先頭と最後は、シングルクォーテーションで囲んでいる。これで、 Today is a "beautiful" day. と出力できる。同様に、'beautiful'とシングルクォーテーションにする場合、文字列の先頭と最後は、ダブルクォーテーションで囲む。このように連携することで、シングルクォーテーションやダブルクォーテーションを文字列に含ませることができる。
連携を理解したうえで、連携させないとどうなるかを試してみた。"beautiful"とダブルクォーテーションで囲み、文字列の先頭と最後もダブルクォーテーションで囲んでみた。
<?php
echo "Today is a "beautiful" day.";//Parse error
echo 'Today is a 'beautiful' day.';//Parse error
?>
上のコードで試したがParse errorとなった。シングルクォーテーションのみで同様に行ってもParse errorであった。エラーの原因は、一つ目と二つ目のクォーテーションで「Today is a 」を囲み、三つ目と四つ目のクォーテーションで「 day 」を囲むので、beautiful が浮いてしまったことと推測する。
別の例として、セレクトボックスを作るときに、シングルクォーテーションとダブルクォーテーションの連携がある。
これも例文の方がイメージを掴みやすい。下は0から12をセレクトボックスで表示し選択結果を表示するコードだが、4行目の echo '<option --- の行に注目する。
<?php
echo '<form method="post">';
echo '<select name="name">';
for ($i = 0; $i <= 12; $i++) {
echo '<option value="' . $i . '">'.$i.'</option>';
}
//<option value="0">0</option> の命令を作っている
//<option value="1">1</option>
//<option value="2">2</option>
//<option value="3">3</option>
//<option value="4">4</option>
echo '</select>';
echo '<input type="submit" value="submit">';
echo '</form>';
if (isset($_POST['name'])){
echo $_POST['name'];
}
?>
上の4行目は、シングルクォーテーションで文字列を囲み、文字列と変数($i)をピリオドで文字結合している。ダブルクォーテーションが、中途半端に文字列の中に入っている。初めてこのコードを見たときは、なかなか理解できなかった。そこで、echoで表示される内容を考えることにした。
1 $iは一旦変数のままとする
'<option value="' . $i . '">'.$i.'</option>'
2 $iを仮に0とする
'<option value="' . 0 . '">'.0.'</option>'
3 シングルクォーテーションと文字結合のピリオドを外し、echo で表示される内容にする
<option value="0">0</option>
1が3に変わる途中で、2をイメージすることで、文字列を囲むシングルクォーテーションと、文字結合のピリオドが消え、ダブルクォーテーションが残ることが理解できた。シングルクォーテーションとダブルクォーテーションを入れ替えた場合も試してみた。
<?php
echo '<form method="post">';
echo '<select name="name">';
for ($i = 0; $i <= 12; $i++) {
echo "<option value='" . $i . "'>".$i."</option>";//シングルクォーテーションとダブルクォーテーションを入れ替えた
}
echo '</select>';
echo '<input type="submit" value="submit">';
echo '</form>';
if (isset($_POST['name'])){
echo $_POST['name'];
}
?>
問題なくセレクトボックスで選んだ値が表示された。実は4行目の
value='$i'
の部分がシングルクォーテーションなので、valueには0などの値ではなく
$i
の変数が入ることを心配したが、それは不要であった。(理由は不明だが初心者として気にしなくてもよいことを確認できた)