web-dev-qa-db-ja.com

変数連結のための単一引用符または二重引用符?

変数を連結した方がいいですか(たとえば、$name)を既存の文字列に挿入します(たとえば、$string) このような:

$string='Hi, my name is '.$name

または、次のように変数を文字列に埋め込む:

$string="Hi, my name is $name";

または、次のような関数を使用する方が良いでしょう:

$string=sprintf("Hi, my name is %s",$name);

プロセッサー時間/効率の点でどちらが優れていますか?

23
ina

テストを行ったすべての人が、シングルクォートを使用するとパフォーマンスがわずかに向上すると結論付けました。最後に、単一引用符は連結になりますが、二重引用符はインタプリタに完全な文字列の変数の解析を強制します。

ただし、PHPの最後のバージョンの場合、それを行う際に追加される負荷は非常に小さいため、ほとんどの場合、結論は実際には問題ではありません。

したがって、パフォーマンス担当者にとっては、単一引用符を使用してください。 「私はコードを読みやすくしたい」という人向けに、Flavius Stefがすでに指摘しているように、二重引用符は読みやすさの点ではるかに優れています。

編集:ただし、1つのこと-変数なしで文字列に単一のドルを使用する場合は、一重引用符を使用してください。 ( http://www.weberdev.com/get_example-3750.html は、これらの文字列の解析に4倍の時間がかかることを指摘しています)

26
Blizz

PHPにおける一重引用符と二重引用符の違いは、二重引用符は「インテリジェント」であり、読み込まれると変数を解析するのに対し、一重引用符は「ダム」であり、解析しようとしないことです。文字列内の任意の文字。

これらにより、使用できる文字に若干の違いが生じます。基本的に、単一引用符を使用するときにエスケープする必要があるのは、単一引用符自体だけです。

'\''

二重引用符を使用する場合は、他の文字をエスケープする必要があります。

"\$"

ただし、末尾に改行を追加するなど、気の利いたことも可能です。

"my string\n"

一重引用符を使用すると、連結を行う必要があります。

'my string' . chr(10)
'my string' . "\n"

一般的に、一重引用符は「ダム」であるため、より高速です。

ただし、通常、これらの問題についてはあまり心配する必要はありません。これは時期尚早の最適化と呼ばれ、回避する必要があります。

最適化に関する一言:一般に、最初にプログラムを機能するように記述し、次に最大のボトルネックを見つけて特定のボトルネックを修正する必要があります。 PHPで文字列の速度が本当に問題になる場合は、別の言語に切り替えることを検討してください。

速度について:CPU時間よりもメモリ使用量に重点を置きたいと思うでしょう。これらの場合、CPU時間はかなり一定と見なすことができます。 CPU時間は、何度も繰り返すアルゴリズムを作成する場合に、より適切です。

連結について:ドット演算子を使用して文字列を連結するほど、使用するメモリが多くなります。

このことを考慮:

$str1 = 'asdf';
$str2 = 'qwer';

// this will result in more memory being allocated for temporary storage
echo $str1 . $str2;

// this will not allocate as much memory as the previous example
echo $str1;
echo $str2;
11
thnee

私は一般的に文字列補間("Hi, my name is $name")は、読みやすさの観点から優れています。

8
Flavius Stef

パフォーマンスのために、他の人が証明したように、二重引用符ではなく単一引用符を使用する方がわずかに高速です。

一重引用符を読みやすさの科学に適用し、主観性から遠ざけると、実際にはさらに「ノイズ」が追加されます。ノイズと読みやすさとの関係については、Clean Codeという本で詳しく説明されており、余白が多くなければならないほど読みやすさが低下すると結論付けることができます。主観性に適用すると、私が時間をかけて読んだほとんどの場所は、実際には二重引用符よりも一重引用符を好む。

あなたの判断を使用してください。

$var = "My $string with $lots of $replacements."

よりも読みやすいです:

$var = 'My ' . $string . ' with ' . $lots . ' of ' . $replacements . '.';

私はそれを認めます:

$var = "My string.";

ほぼ同じように見えます:

$var = 'My String.';

ただし、後者の方がノイズが少なく、周囲に多くのコードがある場合は、少しでも役立ちます。単一引用符を使用することで得られる他の利点は言うまでもありません。

結局、私はKISSを好む。二重引用符が必要でない限り、単一引用符を使用してください。入力しやすく、保守しやすく、解析しやすく、読みやすい単純な規則。

5
Tres

個人的には、それが通常の変数、またはクラスプロパティでさえあれば、次のように記述します。

$newVarA = "This is some text with a $variable";
$newVarB = "This is some more text, written in $settings->language";

ただし、配列値を使用している場合は、単一引用符で連結します。

$newVarC = 'This is some text from a ' . $text['random'] . ' array';

これが理にかなっていることを願っています。それはすべて、慣習を見つけ、それに固執することです。

0
Martin Bean

構文の観点からは問題ではありません。どちらのバリアントも正しいです。より快適に感じるものを使用してください。

個人的には、$string="Hi, my name is $name"、引用符をいじる必要がないため。たとえば、10個の変数を使用して複雑なSQLクエリをイメージします...

0

PHPはかなり遅いです:

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-088-introduction-to-c-memory-management-and-c-object-oriented-programming- january-iap-2010/lecture-notes/MIT6_088IAP10_lec01.pdf

スライド3

したがって、このような小さな最適化についてはあまり気にしないでください。

ただし、APCを使用してコードをバイトコードにキャッシュすることに重点を置きます。プロジェクトの速度が大幅に向上します。

0
Homer6

私のモットーと答えは次のとおりです。マシンコードを書くのはコンパイラーに任せてください。どういう意味か教えてあげます...

PHP変数を含める必要がない場合は一重引用符を使用します。それ以外の場合は二重引用符を使用します。パフォーマンスを気にする必要はありません。本番サーバーでAPCを使用するだけです。代わりに、最も保守しやすいコードを書くことに集中してください。コメントを使用してください。 、二重引用符などは、コードが遅くなる可能性があっても適切に処理します。コードの保守性や可読性を低下させるすべての最適化は悪いので、コードをマシンコードに変換するのはopcode-cachersとコンパイラに任せてください。自分で実行しないでください。 ..最適化が原因でソースコードが難読化される。

0
Gabor de Mooij

変数を連結する場合、一重引用符付き文字列は二重引用符付き文字列よりも優れたオプションです。理解を深めるにはリンクをクリックしてください...

http://www.codeforest.net/php-myth-busters-using-single-quotes-on-string-is-faster-then-double-quotes

0
DkPathak