実はダブルクォーテーションも使えます
これまでの記事で、「メッセージ(文字列)はシングルクォーテーション( ' )で囲む」と説明しましたが、正確には、文字列は「シングルクォーテーション( ' )」または「ダブルクォーテーション( " )」で囲むことができます。
具体的には次のように2通りの書き方ができます。
echo 'これはペンです。';
echo "これはペンです。";
これらの内容は、いずれも次のように同じ結果を表示します。
これはペンです。
ただし、これはシンプルな文字列の場合です。
厳密には、シングルクォーテーションで囲んだ場合と、ダブルクォーテーションで囲んだ場合とでは、次のような違いがあります。
- 改行やタブなど特殊な記述の出力が異なる。
シングルクォーテーションの場合は改行やタブの記述を解釈せずにそのまま出力する。
ダブルクォーテーションの場合は改行やタブなどの記述を解釈して出力する。
(具体的な内容は後述します) - シングルクォーテーションの方が、ダブルクォーテーションよりも処理が速い。
シングルクォーテーショで文字列を囲んだ方が、特殊な記述を解釈する処理がなく、即時にそのまま文字列を出力するため、ダブルクォーテーションで囲むよりも処理が速いです。
ナノ秒レベルの差だと思いますが、塵も積もれば山となるであり、処理が多くなったり、Webサイトへの同時アクセス数が多くなったりなどで、やや影響が出るかもしれません。
なので、特に理由がなければ、できるだけシングルクォーテーションを使うのがオススメです。
改行
ここでいう改行ですが、HTMLの改行<br>ではなく、HTMLソースに出力する文字列自身の改行のことです。
Webページを開発する際にあまり意識する必要は無いかもしれませんが、もしかしたら、HTMLソースを改行して読みやすくしたいという場合など、いざというときに必要になるかもしれませんので、覚えておきましょう。
ということで、難しく言いましたが、実は改行をするのは簡単です。
例えば「これはペンです。」の「これは」の次に改行を入たい場合、次のように書けばOKです。
echo 'これは ペンです。';
echo "これは ペンです。";
そのままですね(笑)
でも、HTMLタグの「<」と「>」が別の行に記述してたら気持ち悪いと思うのと同様に、シングルクォーテーション / ダブルクォーテーションの開始と終了が違う行にあると、プログラムソースの可読性(読みやすさ)が低下します。
プログラムソースもオシャレにカッコよく書きたいものです。
そこで、PHPには、改行を記述するために「\n」(※注1)という特別な記述法があります。
ちなみに、「\」のことを「バックスラッシュ」と呼びます。
「/」(スラッシュ)の逆向きだから、バックスラッシュということですね。
- Windowsの場合
「\」(バックスラッシュ)が入力できないため、「\n」(バックスラッシュ + n)の代わりに「¥n」(円マーク + n)と入力してください。
これは日本のコンピューターの歴史的な背景で、日本語のフォントを使っている場合に「\」(バックスラッシュ)を入力すると「¥」(円マーク)が表示される仕様によるものです。
画面で「¥n」(円マーク + n)と表示されていても、「\n」(バックスラッシュ + n)と記述した場合と同じ処理が行われます。 - Macの場合
「¥n」(円マーク + n)ではなく「\n」(バックスラッシュ + n)と正しく入力しなければ正常動作しません。
「option」ボタンを押しながら「¥」(円マーク)ボタンを押すと、「\」(バックスラッシュ)を入力することができます。
さて、改行の記述方法について説明しました。
実際に記述してみましょう。
echo 'これは\nペンです。';
echo "これは\nペンです。";
そして、ブラウザで動作確認してみましょう。
動作確認方法ですが、ブラウザ画面ではなく、ブラウザ画面のHTMLソースを確認してください(HTMLの改行<br>ではなく、HTMLソース自身の改行です)。
それぞれの結果は、次のようになっているはずです。
<シングルクォーテーションで囲んだ場合>
これは\nペンです。
<ダブルクォーテーションで囲んだ場合>
これは
ペンです。
あれ?結果が異なりますね。原因わかりますか?
答えは前述しましたが、
「シングルクォーテーションは改行やタブの記述を解釈せずにそのまま出力する。ダブルクォーテーションは改行やタブなどの記述を解釈して出力する。」
という違いがあるためです。
つまり、
「\n」を使用して改行する場合、対象となる「\n」を含んだ文字列は、ダブルクォーテーションで囲まなければならない。
ということです。
以上で、改行の記述方法の説明は終わりです。
(※注1:厳密には、Linux系では「\n」、WIndows系では「\r\n」になりますが、いずれも「\n」で改行されるので、厳密性を求められない限りは「\n」で大丈夫です。また別の機会に説明しようと思います。)
タブ
もし、HTMLソースにタブを出力したい場合は「\t」を使用します。
こちらも、「\n」と同様に、
echo '\tタブがあります。';
echo "\tタブがあります。";
と書くと、シングルクォーテーションの場合は、
\tタブがあります。
とそのまま「\t」が出力され、
ダブルクォーテーションの場合は、
[TAB]タブがあります。
と出力されます。
([TAB]の部分はタブが出力されています(タブを表現するために、本当のタブの代わりに、文字で[TAB]と書いています)
\マーク
「\n」や「\t」のような記述に「\」を使いましたが、では「\」自身は出力できるのかという疑問があるかもしれません。
その場合は、次のように書きます。
シングルクォーテーションの場合は、そのまま出力されるので、
echo '\はバックスラッシュと呼びます。';
ダブルクォーテーションの場合は、「\」を二重にして「\\」と書けばOKです。
echo "\\はバックスラッシュと呼びます。";
以上のシングルクォーテーションを使用した書き方、ダブルクォーテーションを使用した書き方は、いずれも次のように出力されます。
\はバックスラッシュと呼びます。
シングルクォーテーション/ダブルクォーテーションを出力する方法
メッセージ(文字列)を囲んでいるシングルクォーテーション「'」やダブルクォーテーション「"」を文字列として出力したい場合、どうすれば良いかについて考えてみましょう。
例えば、次のように記述すると、メッセージ(文字列)の範囲(開始と終了)が判断できないため、動作確認するとエラーになります。
echo 'That's right!';
echo "He said, "This is a pen."";
さて、どうしたら良いでしょう?
ピンときた人は、次のように書くことを思いつくかもしれません。
echo "That's right!";
echo 'He said, "This is a pen."';
文字列にシングルクォーテーションが含まれていればダブルクォーテーションで囲み、ダブルクォーテーションが含まれていればシングルクォーテションで囲むという作戦です。
はい、正解です!
かしこさを1ポイント差し上げます(笑)
実行結果は次のとおりです。期待通りの結果になりました。
That's right!
He said, "This is a pen."
ただ他の方法もあります。
「\」を使って次のように書くことができます。覚えておきましょう。
echo 'That\'s right!';
echo "He said, \"This is a pen.\"";
文字列中のシングルクォーテーションや、ダブルクォーテーションは直前に「\」をつけることで、文字列の両端を囲む記号ではなく、文字列として出力する記号であると、PHPの実行エンジンに知らせることができます。
実行結果は次のとおりです。この書き方も期待通りの結果になりました。
That's right!
He said, "This is a pen."
このシングルクォーテーション / ダブルクォーテーションの書き方は、どちらも正解です。
使用する場面で、書きやすい方、プログラムソースが読みやすい(可読性が高い)方を選ぶと良いと思います。
エスケープ記号について
さて、これまで「\n」、「\t」、「\\」、「\'」、「\"」のような特殊な文字列の記述方法について説明してきました。
全ての共通点は「\」がついているという点です。
この場合に使用する「\」は、特別な記述の場合にエラーを回避する(エスケープする)という意味で、「エスケープ記号」と呼びます。
開発現場で、しばしば使用する言葉ですので、覚えておきましょう。
おわりに
今日は文字列の特別な記述方法について説明しました。
いかがでしょうか?
慣れれば簡単になります。
何度もこの記事を読み直して頑張って理解してみてください。
PHPプログラミング入門講座 〜 全記事一覧 〜
- PHPで開発された有名なWebサイト
- PHPでどのような機能が作れるか?
- サーバーについて理解しよう
- Webサーバーの処理について詳しく説明
- PHPプログラムの動作について説明
- パソコンにPHPの動作環境を構築しよう
- 一番簡単なPHPプログラムを書いてみよう
- ブラウザ画面にメッセージを表示しよう
- PHPタグの書き方と終了タグの省略
- 現在のページ:特殊なメッセージ(文字列)の書き方
- PHPプログラムで計算をしてみよう
- 変数
- 文字列の結合とヒアドキュメント
- ファイルの分割とファイルの読み込み
- コメント
- 定数
- 数値と文字列の性質・デバッグ
- 条件分岐 (if文)
- 論理型 (boolean型)
- 比較演算子
- 論理演算子
- 条件分岐 (switch文)
- 三項演算子
- 配列とforeach文
- 代入演算子 / 加算子 / 減算子
- ループ処理 (for文)
- ループ処理 (while文とdo-while文)
- break
- continue
- 連想配列
- 連想配列のループ処理