PHP学習コラム第4回『ダブル&シングルクォートと、ヒアドキュメントの使いどころ』を公開しました。

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

この記事が役に立ったらシェア!
tweet0はてなブックマークに追加
みんなが読んでるWeb担メルマガで、あなたも最新情報をチェック
  • SEOやアクセス解析のなどノウハウをゲット
  • 事例やインタビューも見逃さない
  • 要チェックのセミナー情報も届く
  • 編集長コラムを一足先に読める

日本赤十字社 東日本大震災 義援金募集
みんなが読んでるWeb担メルマガで、あなたも最新情報をチェック
  • SEOやアクセス解析のなどノウハウをゲット
  • 事例やインタビューも見逃さない
  • 要チェックのセミナー情報も届く
  • 編集長コラムを一足先に読める

Web業界の転職情報

もっと見る
Sponsored by

今日の用語

Slurp
Yahoo!の検索エンジンであるYSTが使うクローラー。Yahoo Slurpと ... →用語集へ

連載/特集コーナーから探す

インフォメーション

Web担のメルマガを購読しませんか?
Web担の記事がコンパクトに毎週届くメールマガジン「Web担ウィークリー」は、10万人が読んでいる人気メルマガ。忙しいあなたの情報収集力をアップさせる強い味方で、お得な情報もいち早く入手できます。

Web担に広告を掲載しませんか?
購読者数10万人のメールマガジン広告をはじめとする広告サービスで、御社の認知向上やセミナー集客を強力にお手伝いいたします。

サイトマップ
RSSフィード


Web担を応援して支えてくださっている企業さま [各サービス/製品の紹介はこちらから]