PHP Manual
/
基礎知識

引用符の特別な意味

22. 08. 2019

Obsah článku

PHPでは、引用符をアポストロフィに置き換えることで、同じ効果を得られることがよくあります。時には、エスケープを使わずに異なる出力を得るために、わざと引用符とアポストロフィを組み合わせて使うこともあります。

**TLDR:引用符の使用は文脈によっては危険なので、代わりにアポストロフィをどこでも使ってください。引用符は特殊な場合にのみ使用します。

キャラクター
クォーテーションマーク
アポストロフィー

例1:同じ出力

echo "ハロー、ワールド"; // これは同じ
echo 'ハロー、ワールド'; // このように

この場合、引用符やアポストロフィの使用は問題ではありません。ですから、表面的には、引用符とアポストロフィの違いはないように見えるかもしれません。

クォーテーションマークとアポストロフィーの組合せ

次のようなコードを考えてみましょう。

echo '私の好きな色は「赤」です!';

書き出す文字列の区切りにキャリッジリターンを使うと、文字列の**始まり**と**終わりが曖昧になるので、文字列の区切りにアポストロフィを使い、この問題を解決しているのです。

引用符で区切られた文字列への引用符の挿入

時には、同じ文字列の中に quoteapostrophe の両方をリストアップする必要がある場合があります。2つの文字列の連結だけでなく、いわゆる文字のエスケープも使用することができます。

echo "この文字列は、"contains" quotesを含んでいます。";

この場合のバックスラッシュは「まさにこの文字」という意味を持つため、文字列の末尾(あるいは他の文字)とはみなされず、常にクォーテーションマークとなるのです。その他、耐久性が保証されず、正しい意味を誤解される可能性のある奇妙な文字をこのように表記することがある。

文字列内の変数

引用符は、文字列に直接変数を挿入することができるため、非常に厄介です。

$color = '赤色';
echo "Moje oblíbená barva je {$color}, a tvoje?";

アポストロフィの場合は、文字列を折りたたむ必要があるため、より安全です。

$color = '赤色';
echo '私の好きな色は' . $color . 'あなたは?';

良い習慣

一般に、文字列の中では単なる引用符よりもはるかに少ないので、何かを区切るには(可能であれば)アポストロフィを使うことをお勧めします。

さらに、PHPはWeb言語です。つまり、HTML文書を生成するために使用され、HTMLコードの一部を生成するためにも使用されるため、引用符は非常に一般的です。個人的には、どこでもアポストロフィを使うことに慣れることをお勧めします。

引用符の動作

危ない!引用符を完全に捨てないでください。しかし、初心者はこれらをエラーとみなし、理解することができません。

$x = 10; // 変数を設定する
echo "Hodnota proměnné je: $x, přesně."; // とリストアップ

引用符の中では、変数の値を列挙することもできますし、ドル記号はそれ以降をすべて変数にします。つまり、変数の値ではなく、ドル記号を出力したい場合は、エスケープする必要があるのです。

$price = 25; // ドル建て価格
echo "Cena produktu: $price\$"; // "商品価格:25ドル "と表示します。

この場合、引用符の利点は疑問で、アポストロフィを使い、単純に文字列をつなげた方がよいかもしれません。

$price = 25;
echo '製品価格です。' . $price . '$'; // 前の例と同じように表示されます。

Note: ドル建て価格は、正しくは $25 という形式で書かれます。これは、$$price 記法が実際には variable variable というものを呼び出すため、さらに混乱を招きます(変数名では、呼び出すべき変数の名前を呼びます - ただの混乱です)。

TIP: 変数変数に興味があるかもしれません。

文字列指定

一般に、引用符やアポストロフィで囲まれたものは、文字列として扱われます。このように

$x = 5; // これは他のものです。
$x = "5"; // これよりも

最初のケースでは、数字の5が**$x**変数に格納され、2番目のケースでは、文字列の "5 "が同じ変数に格納されています。幸いなことに、PHP ではこれは問題ではなく、どちらの変数も (ほとんど) 同じように扱うことができます。なぜなら、PHP は変数の内容に応じて自動的に 変換 を行うからです。しかし、一般的には引用符で数字を書かないことをお勧めします。特に、計算機で計算する場合は、丸め誤差が発生する可能性があります。

関数の出力を変数に格納したいこともあります。

$pi = 3.14159;
$zaokrouhleni = round($pi); // これは正しい
$zaokrouhleni = "round($pi)"; // これは「間違っている」(問題は、私がどのような出力を期待しているかだ)。

2番目のケースでのエラーは、引用符の中だけで、round()関数の出力が$round変数に格納されず、この関数を呼び出した文字列が格納される場合です。

TIP:$pi はこのようにスクリプトに直接入力する必要はなく、より複雑な計算のために、より正確な pi() 関数を使用することができます。

エスケープすることの特別な意味

Warning: 以下の例は引用符で囲んだ場合のみ動作し、アポストロフィで囲んだ場合は特別な意味を持たない通常の文字のように動作します(アポストロフィをエスケープする ' は例外です)。 エスケープは、プログラマーが意図していなくても言語表現として解釈され、処理されてしまうような特殊文字を引用符やアポストロフィの中に出力したいときに使うものです。すでに例を示しましたが、このセクションでは、考えられる動作の例外について説明します。

これは、エスケープすること自体に特別な意味がある場合があるからです。例

echo "2行に分かれた長いテキスト。";

前の例では、印刷されます。

Dlouhý text, rozdělený na
dva řádky.

つまり、スラッシュを書き出したい場合は、それをエスケープしなければなりません(この場合、n文字のエスケープは必要ありません。なぜなら、それは再びラップとして理解されるからです。)

echo "2行に分かれた長いテキスト。";

このような特殊文字は他にもあり、例えばtはタブを作ります。全リストは公式ドキュメントに掲載されています。

エスケープにおける特殊文字の実使用

まず始めに、PHPではほとんど何でも複数の方法で行うことができることを指摘しておきたいと思います。ここで挙げた例は、問題のアプローチ方法を説明するためのものです。

例えば、テキストを一行ずつ解析したい場合は、explodeという関数を使うことができる。

$parser = explode("\n", $retezec); // テキストを一行ずつ解析する

この場合、特殊文字 n の使用は理にかなっています。なぜなら、改行によって解析したいことを非常に効果的に伝えることができるからです。

$parser = explode('
', $retezec);

警告: UnixとWindowsシステムでは、行の終わりを示すために使用される文字が混同されています。例えば、Windowsでは CRLF (2つの rrn 文字) を使用しますが、Linuxでは LF (1 つの ``n文字) のみ使用します。行単位で解析する場合は、この点に注意する必要があります。通常、この問題は、文字をLF` だけに正規化することで解決されます。

概要

できれば、あらゆるところでアポストロフィーを使用してください。

引用符の使い方を知って、必要なところだけ(あるいは一般的に良いところだけ)使うのが良いと思います。引用符を含むテキストを出力する場合は、アポストロフィで囲んでください(そうすれば、より予測しやすい動作になります)。個人的には、アポストロフィで入力すると不必要に複雑なエスケープが必要な各種特殊文字を、引用符で表現しています。

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
3.
Status:
All systems normal.
2024