1. ホーム
  2. php

[解決済み] PHPの文字列で、シングルクオートとダブルクオートの違いは何ですか?

2022-03-22 20:58:22

質問

PHPのコードで、文字列が一重引用符で囲まれていたり、二重引用符で囲まれていたりするのを見かけるのですが、なぜなのでしょうか?

ただ、.NETやC言語では、シングルクォートで囲まれている場合、それは文字列ではなく、文字であることを意味していますね。

どのように解決するのですか?

PHPの文字列 のみならず の方法ではなく の方法で行います。

  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 4.3 以降、シングルクォートとダブルクォートの速度が基本的に同じであることを説明します。 ( Useless Optimizations の下にある、セクション C ). また、この ベンチマークページ には、シングルクォートとダブルクォートの比較があります。ほとんどの比較は同じです。1つだけ、ダブルクォートがシングルクォートより遅いという比較があります。