PHP学習コラム第4回『ダブル&シングルクォートと、ヒアドキュメントの使いどころ』を公開しました。
- 編集部の見解や意向と異なる内容の場合があります
- 編集部は内容について正確性を保証できません
- 画像が表示されない場合、編集部では対応できません
- 内容の追加・修正も編集部では対応できません
こんにちは~、ぺち子です!
前回はホワイトスペースと大文字小文字のお話でした。
今回は『ダブル&シングルクォートと、ヒアドキュメントの使いどころ』について書いてみます。
文字列を囲むには、3種類の方法がありますよね。
どう使い分けていますか?
それぞれの使い方のおさらいも兼ねて、使いどころを見てみましょう。
■ダブルクォート
「"」で始まり、「"」で終わります。
この間に囲まれたものが、文字列として扱われます。
シングルクォートよりも機能が多いです。
------------------------------------------------------------
<?php
// はろー
print "Hello!"; // Hello!
// 「'」はそのまま書きます
print "Happy X'mas!"; // Happy X'mas!
// 「"」は「\"」と書きます(「"」のエスケープ)
print "リンク"; // リンク
// 「\」は「\\」と書きます(「\」のエスケープ)
print "\\1,000-"; // \1,000-
// 他にも、「\n(改行)」「\t(タブ)」「\$(ドル記号)」などのエスケープシーケンスが使えます
print "これは \$1,000 です。\n"; // これは $1,000 です。[改行]
// 変数は展開されます
$sample = "サンプル";
print "これは$sampleです。"; // これはサンプルです。
// 変数と文章の区切りをつけるため、「{}」で囲った方が安全です。
print "これは{$sample}です。"; // これはサンプルです。
// 変数が配列で、キーに引用符を使う場合は、「{}」が必須です。
$color = array("bl" => "青", "rd" => "赤", "yl" => "黄");
print "この商品の色は、{$color['bl']}です。"; // この商品の色は、青です。
// 結合演算子「.」を使って、変数と文章を連結する方法が一番安全です
// これなら、あとで「"」を「'」に変更しても、不具合は起こりません
print "これは" . $sample . "です。"; // これはサンプルです。
?>
------------------------------------------------------------
ダブルクォートの使いどころ。
・展開したい変数がある場合
・エスケープシーケンス(改行など)を使いたい場合
・文章中でシングルクォートを多用したい場合
・コーディングルールで「"」を使うと決められている場合
■シングルクォート
「'」で始まり、「'」で終わります。
この間に囲まれたものが、文字列として扱われます。
ダブルクォートよりも機能が少ないです。
------------------------------------------------------------
<?php
// はろー
print 'Hello!'; // Hello!
// 「'」は「\'」と書きます(「'」のエスケープ)
print 'Happy X\'mas!'; // Happy X'mas!
// 「"」はそのまま書きます
print 'リンク'; // リンク
// 「\」は「\\」と書きます(「\」のエスケープ)
print '\\1,000-'; // \1,000-
// それ以外の文字はそのまま出力されます
print 'これは \$1,000 です。\n'; // これは \$1,000 です。\n
// 変数は展開されません
$sample = 'サンプル';
print 'これは$sampleです。'; // これは$sampleです。
// 結合演算子「.」を使って変数と文章を連結すれば、変数を出力できます
print 'これは' . $sample . 'です。'; // これはサンプルです。
?>
------------------------------------------------------------
シングルクォートの使いどころ。
・展開したい変数がない場合
・展開したい変数はあるけど、結合演算子で足りる場合
・エスケープシーケンス(改行など)を使わない場合
・文章中でダブルクォートを多用したい場合
・コーディングルールで「'」を使うと決められている場合
(「少ない機能で賄えるときは、少ない機能の方を使う」というルールを持っている人もいます。)
■ヒアドキュメント
「<<<SAMPLE」で始まり、「SAMPLE;」で終わります。
この間に囲まれたものが、文字列として扱われます。
終了タグの前後は改行でないといけません。
------------------------------------------------------------
<?php
// スペースや改行などもそのまま出力されます
<<<HELLO
Hello!
World!
HELLO;
// Hello!
// World!
<<<HELLO
Hello!
World!
HELLO;
// Hello!
// World!
// 変数やエスケープシーケンスについては、ダブルクォートと同じです。
$sample = "サンプル";
<<<SAMPLE
これは{$sample}です。
あれは{\$sample}です。
SAMPLE;
// これはサンプルです。
// あれは{$sample}です。
?>
------------------------------------------------------------
ヒアドキュメントの使いどころ。
・文字列に改行が多い場合
・文字列にインデントが多い場合
・文章中でシングルクォートやダブルクォートを多用したい場合
とはいえ、ヒアドキュメントを使っているプロジェクトを、私は見たことがありません。
ここぞという使い道も特に思いつきません~。
HTML文書として表示されるPHPファイルならば、ヒアドキュメントではなく、PHPタグの外側に出せばいいですし。
[before.php]
------------------------------------------------------------
<?php
print <<<HTML
<html>
<head>
</head>
<body>
ようこそ{$_GET['name']}さん!
</body>
</html>
HTML;
?>
------------------------------------------------------------
[after.php]
------------------------------------------------------------
<html>
<head>
</head>
<body>
ようこそ<?php print {$_GET['name']} ?>さん!
</body>
</html>
------------------------------------------------------------
そもそもプログラミングでは、MVCといって、HTML構成とPHPの処理を分ける方法が一般的なので、PHPの中で長々とHTMLタグを書くことはまずありません。
また、なにか長い文字列を定義する必要があったとしても、
------------------------------------------------------------
<?php
// 略
$welcome_message = <<<WELCOME_MSG
〇〇〇のみなさま、ようこそ△△△へ!
このサイトでは、□□□な×××により、◎◎◎なことができます。
なんとかかんとか。
べらべら。
WELCOME_MSG;
// 略
print $welcome_message;
?>
------------------------------------------------------------
普通はこんなところで定義しません。
更新しやすいように、welcome_message.txtという別ファイルを用意したりします。
SQL文(後章で出てきます)の定義でヒアドキュメントを使うと見やすい!という意見を見ましたが、ダブルクォートでも特に見づらいことはないと思うんですよね。
------------------------------------------------------------
<?php
$sql = "
select *
from $table_name
where user_id = ?
";
?>
------------------------------------------------------------
まぁ、SQL文もPHPとは別に外部ファイル化されていたりするので、ヒアドキュメントを使うor使わない以前の話だったりしちゃいますが…。
そうそう、PHP5.3.0以降では、シングルクォートと同じような動きをするヒアドキュメント(=Nowdoc)が追加されました。
ヒアドキュメントの宣言をシングルクォートで囲うと、変数などの展開がされません。
------------------------------------------------------------
<?php
$world = "世界";
print <<<'HELLO'
こんにちは{$world}!
HELLO;
// こんにちは{$world}!
?>
------------------------------------------------------------
ヒアドキュメントの宣言をダブルクォートで囲った場合(PHP5.3.0以降で有効)は、通常のヒアドキュメントと同じように、変数が展開されます。
ま、あんまり使い道ないと思いますけどね!(笑)
でも、たまにデバッグ(プログラムの動作を確認するための作業)で使ったりもするかもしれないですし、自分以外の人がもしかしたら使うかもしれないので、知識としてヒアドキュメントの使い方も知っておいた方がよいですね。
それでは今回はこの辺で~。
____________________________________________________________
************************************************************
「ぺち子の目指せPHP初級試験合格!」PHP学習コラム目次
第一回
「info.phpを作成し、ブラウザで表示させる おまけ:GUNDAM」
http://on.fb.me/K5jfiq
第二回
「開始タグと終了タグの適切な書き方」
http://on.fb.me/MwF3T4
第三回
「ホワイトスペースと大文字小文字の使い方」
http://on.fb.me/KzPf1T
ソーシャルもやってます!