web-dev-qa-db-ja.com

PHPの一重引用符と二重引用符で囲まれた文字列の違いは何ですか?

私はPHPプログラミングの専門家ではありませんが、PHP内のコードの一部が一重引用符で囲まれていることがあり、二重引用符で囲まれていることがあります。

私が知っているのは、.NET、またはC言語で、それが一重引用符で囲まれているのであれば、それは文字列ではなく文字列です。

733
rob waminal

PHP文字列 は、twoの方法だけでなく、 4つの方法。

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

速度:
一重引用符よりも二重引用符よりも高速であることを重視しません。特定の状況ではおそらくより高速です。ここに記事があります PHP 4. (セクションの一番下にあるUseless Optimizations、セクションC)以来、単一引用符と二重引用符が本質的に同等に高速である1つの方法を説明します。また、この benchmarks page には、単一引用符と二重引用符の比較があります。ほとんどの比較は同じです。二重引用符が単一引用符よりも遅い比較が1つあります。

1024
Peter Ajtai

物事は二重引用符で評価されますが、一重引用符では評価されません。

$s = "dollars";
echo 'This costs a lot of $s.'; // This costs a lot of $s.
echo "This costs a lot of $s."; // This costs a lot of dollars.
190
Dani

'一重引用符

文字列を指定する最も簡単な方法は、文字列を一重引用符で囲むことです。一重引用符は一般的に高速で、引用符で囲まれたものはすべて単純な文字列として扱われます。

例:

echo 'Start with a simple string';
echo 'String\'s apostrophe';
echo 'String with a php variable'.$name;

"二重引用符

文字列内でピリオドを使用してコードを区切る必要を回避するには、PHPに二重引用符を使用します(注:連結({})演算子を使用したくない場合は、変数を含めるために中括弧.を使用します)。

例:

echo "Start with a simple string";
echo "String's apostrophe";
echo "String with a php variable {$name}";

PHPでパフォーマンス上の利点のシングルクォート対ダブルクォートはありますか?

はい。一重引用符を使用する方が少し速いです。

PHPは、一重引用符の内側にあるものを解釈するために追加の処理を使用しません。二重引用符を使用する場合、PHPは、文字列内に変数があるかどうかを確認するために解析する必要があります。

45
Janak Kanani

一重引用符で囲まれた文字列は、その中に解釈される変数を持っていません。二重引用符で囲まれた文字列はそうです。

また、二重引用符で囲まれた文字列にはバックスラッシュを付けずにアポストロフィを含めることができますが、一重引用符で囲まれた文字列にはエスケープしない引用符を含めることができます。

一重引用符で囲まれた文字列は解析する必要がないため、実行時に高速です。

36
Borealid

PHPでは、'my name'"my name"は両方とも文字列です。あなたはそれについての詳細を読むことができます PHPマニュアル

知っておくべきことは

$a = 'name';
$b = "my $a"; == 'my name'
$c = 'my $a'; != 'my name'

PHPでは、'a''my name''abc xyz'のように一重引用符を使用して定数文字列を定義しますが、"a $b $c $d"のような識別子を含む文字列を定義するのに二重引用符を使用します。

そして他にも、

echo 'my name';

より速いです

echo "my name";

しかし

echo 'my ' . $a;

より遅い

echo "my $a";

これは他の文字列の使用にも当てはまります。

24
Bang Dao

一重引用符、二重引用符、heredoc引用符、nowdoc引用符の例

<?php

    $fname = "David";

    // Single quotes
    echo 'My name is $fname.'; // My name is $fname.

    // Double quotes
    echo "My name is $fname."; // My name is David.

    // Curly braces to isolate the name of the variable
    echo "My name is {$fname}."; // My name is David.

    // Example of heredoc
    echo $foo = <<<abc
    My name is {$fname}
    abc;

        // Example of nowdoc
        echo <<< 'abc'
        My name is "$name".
        Now, I am printing some
    abc;

?>
16
Rabindra Nath

PHPでは、一重引用符は文字列値と見なされ、二重引用符はそれらの値を置き換えて処理することによって変数を解析します。

$test = "variable";
echo "Hello Mr $test"; // the output would be: Hello Mr variable
echo 'Hello Mr $test'; // the output would be: Hello Mr $test

ここで、二重引用符は値を解析し、一重引用符は文字列値と見なされます($ test変数を解析せずに)。

12
Maulik Bhojani

どちらの種類の囲まれた文字も文字列です。ある種類の見積もりは、他の種類の見積もりを囲むために便利に使用されます。 "'"'"'。引用符の種類の最大の違いは、囲まれた識別子の参照は内側の二重引用符で置き換えられ、内側の一重引用符では置き換えられないことです。

11
wallyk

多分私は少し遅れて、そして少し話題から外れています、しかしここでそれはとにかく…

以下の文字列の内容のため、選択する必要はありません。
alert("It's \"game\" time.");またはalert('It\'s "game" time.');

代わりに、次のように入力してから二重引用符または一重引用符を使用できます。
alert("It’s “game” time.");およびalert('It’s “game” time.');

0
Takit Isy