とりあえず結果だけ教えろな方はこちら
変数
$money = '金';
echo '同情するなら$moneyをくれ'; // ①
// 同情するなら$moneyをくれ
echo '同情するなら' . $money . 'をくれ'; // ② 文字列結合演算子 .
// 同情するなら金をくれ
echo '同情するなら{$money}をくれ'; // ③
// 同情するなら{$money}をくれ
echo "同情するなら$moneyをくれ"; // ④
// エラー
echo "同情するなら$money をくれ"; // ⑤
// 同情するなら金 をくれ
echo "同情するなら{$money}をくれ"; // ⑥ ダブルクォーテーション "" + 波括弧{}
// 同情するなら金をくれ
正確に表示されているのは
② 文字列結合演算子 . で文字列と変数を連結
⑥ ダブルクォーテーション「"」で括った文字列の中に、波括弧{}で括った変数名を埋め込む
場合のみ。
なお、⑤でも表示できるが、どこまでが変数名か明確にするために半角空白でスペースを作っているので、echoで文字列を表示すると不自然な空白が生まれてしまっている。
配列(キー名なし)
$money = ['金'];
echo '同情するなら$money[0]をくれ'; // ①
// 同情するなら$money[0]をくれ
echo '同情するなら' . $money[0] . 'をくれ'; // ② 文字列結合演算子 .
// 同情するなら金をくれ
echo '同情するなら{$money[0]}をくれ'; // ③
// 同情するなら{$money[0]}をくれ
echo "同情するなら$money[0]をくれ"; // ④ ダブルクォーテーション
// 同情するなら金をくれ
echo "同情するなら$money[0] をくれ"; // ⑤
// 同情するなら金 をくれ
echo "同情するなら{$money[0]}をくれ"; // ⑥ ダブルクォーテーション "" + 波括弧{}
// 同情するなら金をくれ
変数同様②⑥はOK。
変数との違いは、④の場合、配列はうまく表示される。
閉じ角括弧 ] が配列添字の終端を表すため(以下マニュアル から抜粋)
同様に、配列添字とオブジェクトのプロパティをパースすることも可能です。 配列添字の場合、閉じ角括弧 (]) は添字の終りを意味します。 シンプルな変数の場合と同じ規則が、オブジェクトのプロパティに対しても適用されます。
配列(キー名あり)
$arr = ['money' => '金'];
echo '同情するなら$arr['money']をくれ'; // ①
// エラー
echo '同情するなら' . $arr['money'] . 'をくれ'; // ② 文字列結合演算子 .
// 同情するなら金をくれ
echo '同情するなら{$arr['money']}をくれ'; // ③
// エラー
echo "同情するなら$arr['money']をくれ"; // ④
// エラー
echo "同情するなら$arr['money'] をくれ"; // ⑤
// エラー
echo "同情するなら{$arr['money']}をくれ"; // ⑥ ダブルクォーテーション "" + 波括弧{}
// 同情するなら金をくれ
キー名なしの場合と異なり、④がエラーになる。
実は文字列内で、キー名を指定して配列の要素にアクセスする場合、 'キー名' のシングルクォーテーションを除く必要がある
echo "同情するなら$arr[money]をくれ"; // ④' シングルクォーテーション「'」を削除
// 同情するなら金をくれ
これで④が正しく表示される。
結果
文字列内で変数や配列の値を使いたい場合は以下のとおり
// 変数
$money = '金';
echo '同情するなら' . $money . 'をくれ'; // 文字列結合演算子 .
echo "同情するなら{$money}をくれ"; // ダブルクォーテーション "" + 波括弧{}
// 配列 キーなし
$money = ['金'];
echo '同情するなら' . $money[0] . 'をくれ'; // 文字列結合演算子 .
echo "同情するなら$money[0]をくれ"; // ダブルクォーテーション
echo "同情するなら{$money[0]}をくれ"; // ダブルクォーテーション "" + 波括弧{}
// 配列 キーあり
$arr = ['money' => '金'];
echo '同情するなら' . $arr['money'] . 'をくれ'; // 文字列結合演算子 .
echo "同情するなら{$arr['money']}をくれ"; // ダブルクォーテーション "" + 波括弧{}
echo "同情するなら$arr[money]をくれ"; // キー名のシングルクォーテーション「'」を削除
// 出力結果(全て)
// 同情するなら金をくれ
結論として
- 文字列結合演算子 .
- ダブルクォーテーション "" + 波括弧{}
の二つなら、どの場合でも変数と配列を正しく展開できるので、どちらかを使えばよい!
なお、シングルクォーテーションの方が処理速度早いとか、ダブルクォーテーションに変数展開した方がコードが読みやすいとかそれぞれメリデリありますが、今回はその辺触れません。
参考
-
結合演算子「 . 」
文字列演算子 -
ダブルクォート+波括弧記法
二重引用符
複雑な (波括弧) 構文