1

重複の可能性:
phpでの一重引用符と二重引用符の文字列の違い

私はPHPの初心者であり、文字列を指定する方法について少し混乱しています。

文字列を指定する方法は4つあるようです

  1. 一重引用符で囲まれた文字列
  2. 二重引用符文字列
  3. ヒアドキュメント
  4. Nowdoc(PHP 5.3.0以降)

なぜこれほど多くの種類の仕様があるのか​​、そして文字列を指定するための最良の方法は何でしょうか?

この記事でも、一重引用符と二重引用符は同じように高速であると書かれていますが、同意しないものもあります。

なぜ一重引用符と二重引用符があるのですか?それは速度を追加しますか、精度は特定の条件下でより良いものですか?

4

3 に答える 3

2

単一引用符で囲まれた文字列は、二重引用符で囲まれた文字列よりも少ないエスケープ シーケンスに注意を払います。比較:

echo "one\ntwo";
# one
# two

と:

echo 'one\ntwo';
# one\ntwo

もう 1 つの重要な違いは、二重引用符で囲まれた文字列が変数を補間することです。単一引用符で囲まれた文字列はそうではありません。

heredoc と nowdoc については、長い文字列 (引用符が含まれる場合があります。含まれている場合はエスケープする必要はありません) をより適切な方法で指定する方法にすぎません。なぜ2つあるのですか?nowdoc が単一引用符で囲まれた文字列であるように、heredoc は二重引用符で囲まれた文字列です。

(ちなみに、これらすべての情報とその他の情報は PHP ドキュメントで入手できます。)

したがって、文字列リテラルにはさまざまな用途があるため、さまざまな種類の文字列リテラルがあります。

于 2012-12-19T03:19:27.147 に答える
2

http://php.net/manual/en/language.types.string.php

  • 単一引用符で囲まれた文字列は、基本的に通常の文字列です。スクリプトがコンパイルされたときにのみ解析されます
  • 二重引用符で囲まれた文字列は実行時に解析されます
  • ヒアドキュメントは、最初と最後に特別なシーケンスを使用して、複数の行にわたって二重引用符で囲まれた文字列を定義する方法です
  • Nowdocsは Heredocs と同じものであり、単一引用符で囲まれた文字列のように解析されません

パフォーマンスの観点からは、基本的に定数を表すため、通常は二重引用符で囲まれた文字列よりも一重引用符で囲まれた文字列の方が適しています。したがって、ほとんどの場合、単一引用符で囲まれた文字列を使用する必要があります。

ただし、多くの場合、出力を準備するときは、二重引用符で囲まれた文字列が非常に実用的です。

$combined = "An $a and $b plus $c";
$combined = 'An '.$a.' and '.$b.' plus '.$c;

これらの行は同じですが、おそらくどちらが書きやすく、維持しやすいかを推測できます。

これはかなり PHP に固有のものですが、他のほとんどのプログラミング言語は同様の構文をサポートしていますが、それらを同等に処理することに注意してください。したがって、それらは実際には、文字列内に引用符を簡単に記述できるようにするためにのみ存在します ("Someone can't handle an apostrophe, but it's not me."またはを検討'<p class="some">Text.</p>'してください)。それぞれをエスケープする必要はありません。

于 2012-12-19T03:21:38.800 に答える
0

一重引用符内のすべての文字と変数は文字どおりに扱われます (ただし、\' の組み合わせは例外です。以下の「エスケープ文字」を参照してください)。次のコードでは、変数の値を出力するという意図した結果が得られません。

  $name = 'Jon'; 
  echo 'Hello, $name';

そのコードは文字通り「Hello, $name」を出力します。

逆に、二重引用符で囲まれた文字と変数は解釈されます。このコードは "Hello, Jon" を表示します:

$name = 'Jon'; 
echo "Hello, $name";

ほとんどすべての特殊なエスケープ シーケンスも、二重引用符内で使用する必要があります。二重引用符で囲まれた文字列で発生する解釈のため、それらはおそらく単一引用符で囲まれた文字列よりも効率的ではありません。ただし、ほとんどのアプリケーションでは、効率の違いは関係ありません。

于 2012-12-19T04:45:56.003 に答える