#1-7 クオーテーション記号の違い

例えば、次のプログラムはエラーになります。

<?php
echo 'I'm Japanese';

これは、英文内で使われるアポストロフィが、echo構文のシングルクオーテーションと混同されてしまって、正常に動作しなくなっているためです。

このような場合、1つの手段としてはクオーテーション記号を変える事はできます。例えば次のプログラムでしたら正常に動作します。

<?php
echo "I'm Japanese";

しかし、例えば次のように、1つの文字列の中に両方のクオーテーション記号が入っている場合はどうでしょう。

<?php
echo "I'm "Japanese"";

このような場合は「エスケープシーケンス」を利用することができます。次のようにプログラムを変更しましょう。

<?php
echo "I'm \"Japanese\"";

記号の前にバックスラッシュ(Windows環境などの場合は、¥マークの場合もあります)記号を挿入します。これで正しく動作するようになります。シングルクオーテーションの場合は、次のようにします。

<?php
echo 'I\'m "Japanese"';

ややこしいのが、囲っている記号と違うものにバックスラッシュをつけてしまうと、そのまま表示されてしまうので気をつけましょう。

<?php
echo 'I\'m \"Japanese\"';

複数行の文章を出力する

画面に複数行のテキストを表示したい場合、次のように実際に改行を入れてしまうことはできます。

<?php
echo "改行を
入れて出力します";

しかし、これではプログラムコードが非常に見にくくなってしまうため、あまり好ましくありません。このような場合も、エスケープシーケンスが活用できます。次のように変更してみましょう。ただし、囲む記号をダブルクオーテーションにする必要があるので気をつけましょう(理由は後述)。

<?php
echo "改行を\n入れて出力します";

こうすると、プログラムは1行ですが出力するときに2行になります。\nというのは、「改行」を表すエスケープシーケンスで、これも良く使われるのでおぼえておくと良いでしょう。

クオーテーション記号での動きの違い

では、これをシングルクオーテーションで行うとどうなるでしょう。

<?php
echo '改行を\n入れて出力します';

この場合、画面にはそのまま「\n」が出力されてしまいます。実は、文字列を囲むクオーテーション記号にはこのように記号類の評価の違いがあります。

シングルクオーテーションは、指定された文字列を基本的には「そのまま」出力します。ダブルクオーテーションは、指定された内容を極力変換して表示しようとします。この違いは、この後「変数」を紹介するとより明確になるため、後ほど改めて紹介しましょう。

エスケープシーケンスの種類

エスケープシーケンスには、クオーテーション記号の他にも次のようなものがあります。先の通り、シングルクオーテーションでは使えない記号もあるため、基本的にエスケープシーケンスを利用したい場合はダブルクオテーションを利用すると良いでしょう。

エスケープシーケンスの種類
https://www.php.net/manual/ja/language.types.string.php#language.types.string.syntax.double

どちらのクオーテーション記号を使うべきか

このように、シングルクオーテーションとダブルクオーテーションでは、動きに違いがあります。それでは、どちらの記号を使うと良いのでしょう。結論から言うと、筆者は普段は「シングルクオーテーション」を利用しています。

変換をしたいと思って利用するのには、ダブルクオーテーションは便利なのですが、思いもよらないものが変換されてしまうなどの弊害もあるため、基本的にはシングルクオーテーションを使っていた方が間違いがありません。

「この文字列は変換して欲しい」と思ったときだけ、ダブルクオーテーションを使うという使い分けをすると良いでしょう。

この記事を書いた人

たにぐち まこと

『よくわかるPHPの教科書』や『マンガでマスター プログラミング教室』の著者。 ともすた合同会社で、プログラミング教育やこども向けの講座などを Udemyや YouTubeで展開しています。