文字列内での変数展開
そふぃのPHP入門 >> PHP言語リファレンス >> PHPの変数 >> 文字列内での変数展開

文字列内での変数展開

文字列内での変数展開

  1. "(ダブルクォート)で括った場合とヒアドキュメントでは変数展開される
  2. '(シングルクォート)で括った場合には変数展開されない

文字列内での変数展開

文字列はダブルクォーテーション「"」かシングルクォーテーション「'」で扱いますが、どちらを使うかによって変数の扱い方が違います。

ダブルクォーテーション「"」で扱った場合には変数が展開されますが、シングルクォーテーション「'」で扱った場合には展開されません。変数の展開とは変数の中身を取り出すかどうかだと思ってください。

ダブルクォーテーション「"」の場合

ダブルクォーテーションでの変数展開

  1. <?php
  2. $fruit = "りんご";
  3. // $fruitの前後の半角スペースは外さないように!!
  4. echo "果物では $fruit が好きです。";
  5. ?>

出力結果

果物では りんご が好きです。

シングルクォーテーション「'」の場合

シングルクォーテーションでの変数展開

  1. <?php
  2. $fruit = "りんご";
  3. echo '果物では $fruit が好きです。';
  4. ?>

出力結果

果物では $fruit が好きです。

このようにシングルクォーテーション「'」の場合には変数の中身が取り出されず、そのまま表示されますので、変数名を表示したい時などには便利です。

文字列を扱うにはヒアドキュメントもありますが、ヒアドキュメントはダブルクォーテーション「"」と同様に変数展開されます。

変数展開時の注意点

ダブルクォーテーション「"」やヒアドキュメント内で変数展開する際の注意点があります。上記の例では$fruitの前後に半角スペースが入っていますが、この場合半角スペースの分も表示されてしまいます。スペースを抜いて表示したい時の方が多いと思いますが、その場合は文字列と変数の結合で扱ったように文字列演算子で結合するか、波括弧「{}」で囲む必要があります。

どうしてそういうややこしい事が起こるかというと・・・

  1. print "果物では$fruitが好きです";

とした場合に、PHPでは「$fruit」という変数とは扱ってくれず、「$fruitが好きです」という変数として扱われてしまうからです。

波括弧「{}」で囲んで変数を明示的に表す

これを回避する一つの方法として、変数を波括弧「{}」で囲んで、「ここからここまでが変数だ!!」とPHP君に教えてあげる方法があります。

  1. <?php
  2. $fruit = "りんご";
  3. echo "果物では{$fruit}が好きです。";
  4. ?>

出力結果

果物ではりんごが好きです。

ちなみに、文字列と変数の結合でやったようにダブルクォーテーション「"」の外に変数を出して文字列結合する方法を取ってもまったく問題ありません。見やすくて分かりやすい方を選べばいいと思いますが、どうしても迷ってしまう人の為に一言。文字列結合の方が多少高速に動作します。

ダブルクォーテーション「"」内でのエスケープ処理

ダブルクォーテーション「"」内で変数を展開させずにそのまま表示したい場合にはエスケープ処理を行います。

参考 文字列のエスケープ

  1. <?php
  2. $fruit = "りんご";
  3. echo "\$fruitには{$fruit}が代入されています。"; // エスケープ処理
  4. ?>

出力結果

$fruitにはりんごが代入されています。