PHP シングルクォートとダブルクォートの違い

シングルクォート(シングルコーテーション)とダブルクォート(ダブルコーテーション)の違い

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

文字列でのダブルクォート

文字列でのダブルクォートを使用する場合は、以下の文字の場合はエスケープが必要となります。またダブルクォートでは、変数を使用した場合は変数が展開されます

引用:PHP マニュアル(エスケープされた文字)

\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

 

スポンサーリンク