PHP シングルクォートとダブルクォートの違い
Contents
シングルクォート(シングルコーテーション)とダブルクォート(ダブルコーテーション)の違い
PHPでのシングルクォートとダブルクォートの違いですが、今まであまり深く考えずに使用していました。
私の場合は日頃はプログラミングよりサーバー管理が主業務ですので、シェルスクリプトの時のような感じで、シングルクォートは文字だけの場合に使用。ダブルクォートは変数を使う場合って感じで使用しています。
きちんと調べずに使用してきたので少し調べてみました
文字列でのシングルクォート
シングルクォートを文字列内で使用した場合は、改行を含む場合もそのまま出力され、ダブルクォートを含む文字もエスケープ処理はいりません。但し、シングルクォートはバックスラッシュ でエスケープする必要があります。
<?php //改行の含む場合のテスト echo '改行の含むテスト みかん りんご'; echo "\n"; //改行コード(\n)を含む場合 echo 'test1 \n'; echo "\n"; //HTMLのタグでダブルクォートを含む場合 echo '<div class="test01">apple</div>'; echo "\n"; // シングルクォートの場合は、エスケープが必要 echo 'I\'ll be back"'; ?> 【出力】 改行の含むテスト みかん りんご test1 \n <div class="test01">apple</div> I'll be back"
シングルクォートでは変数を使用しても変数が展開されず文字列となります
<?php $food='sandwich'; echo "eat a $food \n"; echo 'eat a $food'; ?> 【出力】 eat a sandwich eat a $food
文字列でのダブルクォート
文字列でのダブルクォートを使用する場合は、以下の文字の場合はエスケープが必要となります。またダブルクォートでは、変数を使用した場合は変数が展開されます
\n | ラインフィード (LF またはアスキーの 0x0A (10)) |
\r | キャリッジリターン (CR またはアスキーの 0x0D (13)) |
\t | 水平タブ (HT またはアスキーの 0x09 (9)) |
\v | 垂直タブ (VT またはアスキーの 0x0B (11)) (PHP 5.2.5 以降) |
\e | エスケープ (ESC あるいはアスキーの 0x1B (27)) (PHP 5.4.4 以降) |
\f | フォームフィード (FF またはアスキーの 0x0C (12)) (PHP 5.2.5 以降) |
\\ | バックスラッシュ |
\$ | ドル記号 |
\" | 二重引用符 |
<?php $food='sandwich'; echo "変数の展開: eat a $food \n"; echo "水平タグ \t Apple \n"; echo "バックスラッシュ \\10,000 \n"; echo "ドル記号 \$100 \n"; ?> 【出力】 変数の展開: eat a sandwich 水平タグ Apple バックスラッシュ \10,000 ドル記号 $100
文字列でのヒアドキュメント
ヒアドキュメントはダブルクォートを使用しませんが、ダブルクォートで括られた文字列と全く同じ動作をおこないます
「<<<」 がヒアドキュメントの合図で、この次に書いた文字が再度出現するまで、すべて出力されます。下記の場合はでは <<<EOMとなってますので、EOM;となっているまでの文字列が変数に代入されます
<?php $hoge = 'Apple'; $str = <<<EOM これはヒアドキュメントのサンプル 変数も展開さます:$hoge 長い文字列も大丈夫です EOM; echo $str; ?> 【出力】 これはヒアドキュメントのサンプル 変数も展開さます:Apple 長い文字列も大丈夫です
上記ダブルクォートで使ったサンプルをヒアドキュメントで出力した場合です。echo ダブルクォートで1行ずつ書くより見やすく簡単です
<?php $food='sandwich'; $str = <<<EOM 変数の展開: eat a $food 水平タグ \t Apple バックスラッシュ \\10,000 ドル記号 \$100 EOM; echo $str ?> 【出力】 変数の展開: eat a sandwich 水平タグ Apple バックスラッシュ \10,000 ドル記号 $100
ディスカッション
コメント一覧
まだ、コメントがありません