新型Kindle 4/10発売

文字列

ダブルクォートで囲んだ文字列

変数は展開される。
\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!
参考 nl2brPHP.net

ヒアドキュメント構文

複数行に渡る長い文字列を手軽に作る方法。
用途としては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構文

ヒアドキュメント構文との違いは、
・変数が展開されない
・制御文字が機能しない
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("フォーマット文字列", 値, 値, ...);