PHP における一重引用符と二重引用符の文字列の違いは何ですか? 質問する

PHP における一重引用符と二重引用符の文字列の違いは何ですか? 質問する

PHP のコードの中に、文字列が一重引用符で囲まれているものや、二重引用符で囲まれているものがあるのはなぜか、少し混乱しています。

.NET や C 言語では、単一引用符で囲まれている場合は、文字列ではなく文字であることを意味します。

ベストアンサー1

PHP 文字列2 つの方法だけでなく、4 つの方法で指定できます。

  1. 一重引用符で囲まれた文字列ほぼ完全に「そのまま」表示されます。変数とほとんどのエスケープ シーケンスは解釈されません。例外は、リテラルな一重引用符を表示するにはバックスラッシュでエスケープでき\'、バックスラッシュを表示するには別のバックスラッシュでエスケープできることです\\(つまり、一重引用符で囲まれた文字列も解析されます)。
  2. 二重引用符の文字列は、エスケープシーケンスのホスト(一部の正規表現を含む)を表示し、文字列内の変数が評価されます。ここで重要な点は、評価したい変数の名前を中括弧で囲むことができることです。たとえば、変数があり$type、 を実行したいとしますecho "The $types are"。これにより、変数 が検索されます$types。これを回避するには、 を使用しますecho "The {$type}s are"。 を見てください。文字列解析配列変数などの使用方法を確認します。
  3. ヘレドック文字列構文は、二重引用符で囲まれた文字列のように機能します。 で始まります<<<。この演算子の後に識別子が提供され、その後に改行が続きます。その後に文字列自体が続き、引用符を閉じるために同じ識別子が再度続きます。この構文では引用符をエスケープする必要はありません。
  4. ナウドック(PHP 5.3.0 以降) 文字列構文は、基本的に一重引用符で囲まれた文字列のように動作します。違いは、一重引用符やバックスラッシュでさえもエスケープする必要がないことです。nowdoc は、<<<ヒアドキュメントに使用されるのと同じシーケンスで識別されますが、後続の識別子は一重引用符で囲まれます (例 ) <<<'EOT'。nowdocでは解析は行われません。

注意:一重引用符内の一重引用符と二重引用符内の二重引用符はエスケープする必要があります。

$string = 'He said "What\'s up?"';
$string = "He said \"What's up?\"";

速度:違い
はありません。
信頼できる記事PHPコア開発者の一人から、この件についてコメントをもらいました。テストについて言えば、テストを当然のことと考えてはいけません。信頼できるテストを書くには、特にその結果を解釈するには、多くの知識と経験が必要であることを理解する必要があります。つまり、世の中にあるテストのほとんどは偽物です。たとえば、次のようなコードでは、

for($i=0;$i<100000;$i++) {
    'string';
}

引用符で囲まれた文字列は、スクリプト全体とともに1 回だけ解析され、その後、オペコードに変換されます。その後、オペコードが 100 万回実行されます。つまり、解析以外のすべてのものを測定します。これは氷山の一角にすぎません。このようなナノベンチマークでは、何らかの干渉的な副作用によって台無しにならない信頼性の高いテストを作成することは事実上不可能です。

おすすめ記事