ダブルクォートで囲んだ文字列
変数は展開される。
\n などの制御文字が機能する
$msg = "こんにちは!";
echo "$msg PHP!"; //出力 = こんにちは! PHP!
上記の例だと 「こんにちは!」と「PHP!」の間に半角スペースが入ってしまう。
(くっつけると変数名 $msgPHP と解釈されてしまう)
半角スペースを入れたくない場合は変数を { } で囲む
echo "{$msg}PHP!"; //出力 = こんにちは!PHP!
シングルクォートで囲んだ文字列
変数は変数名がそのまま文字として出力される。
\n などの制御文字が機能しない。
シングルクォートで囲った文字列でエスケープシーケンスが必要なのは、
\'(シングルクォート)
\\(バックスラッシュ)
この2種類のみ。
$msg = 'こんにちは!';
echo '$msg PHP!'; //出力 = $msg PHP!
改行文字はどれを使う?
\n mac, unix(LF)
\n\r, \r\n windows(CR+LF)
\r 古いmac(バージョン9まで)(CR)
これらは PHP_EOL で代替可能。(システムが自動判断して置き換えてくれる)
\nなどは環境依存になってしまうので、積極的にPHP_EOLを使うのが吉。
参考:定義済みの定数
<br> HTML5
<br /> XHTML
作成しているサイトに合わせて使う。
改行文字の前に HTML の改行タグを挿入する関数
string nl2br( $string, bool $is_xhtml = true)
string に含まれるすべての改行文字 (\r\n、 \n\r、\n および \r) の前に <br /> あるいは <br> を挿入して返します。
is_xhtmlはtrueならばXHTML準拠(<br />)、falseならばHTML準拠(<br>)
$msg = nl2br("Hello!" . PHP_EOL . "World!" . PHP_EOL, false);
echo $msg;
出力:
Hello!
World!
ヒアドキュメント構文
複数行に渡る長い文字列を手軽に作る方法。
用途としてはHTMLの<pre>タグと似ているかもしれない。
<<< "識別子" //開始の識別子を囲むダブルクォートは省略可能
任意の文字列 1行目
任意の文字列 2行目
識別子; //終端として識別子を記述。終端はダブルクォートで囲ってはいけない。セミコロンの後はすぐに改行する。インデントもNG。
$hello_str = "こんにちは!";
$msg = <<< EOD
{$hello_str}PHP!
Hello! World!
EOD;
echo nl2br($msg);
出力:
こんにちは!PHP!
Hello! World!
変数は展開されるし、\n などの制御文字も機能する。
識別子は何でも良いが、英字大文字を使用する。
よく使われるのは EOM, EOD, EOT, EOF など
ヒアドキュメント内でダブルクォーテーションを使用する場合、エスケープする必要はない。
そのまま文字として出力される。
Nowdoc構文
ヒアドキュメント構文との違いは、
・変数が展開されない
・制御文字が機能しない
Nowdoc構文は、プログラムコードをテキストとして埋め込む場合に便利に使える。
<<< '識別子' //開始の識別子はシングルクォートで囲む(省略するとヒアドキュメント構文として解釈される)
任意の文字列 1行目
任意の文字列 2行目
識別子; //終端として識別子を記述。終端はシングルクォートで囲ってはいけない。セミコロンの後はすぐに改行する。インデントもNG。
$hello_str = "こんにちは!";
$msg = <<< 'EOD'
{$hello_str}PHP!
Hello! World!
EOD;
echo nl2br($msg);
出力:
{$hello_str}PHP!
Hello! World!
フォーマット文字列を表示
printf("フォーマット文字列", 値, 値, ...);
フォーマット文字列を返す
$msg = sprintf("フォーマット文字列", 値, 値, ...);