PHP文字列の連結-“ $ a $ b”対$ a。 “ ” 。 $ b-パフォーマンス
-
06-07-2019 - |
質問
速度の違いはありますか、たとえば:
$ newstring =" $ aと$ bは、$ c"を見に行きました;
and
$ newstring = $ a。 "および" 。 $ b "見に行きました" 。 $ c;
そしてもしそうなら、なぜ?
解決
PHPのバージョンによって異なりますが、次のように記述した場合、2番目の方がどれだけ速いかによって異なります。
$ newstring = $ a。 'と'。 $ b '見に行きました'。 $ c;
PHPはバージョンごとに非常に一貫性がないため、パフォーマンスに関してはビルドごとにビルドする必要があるため、自分でテストする必要があります。
以下に示すように、言う必要があるのは、 $ a
、 $ b
、および $ c
のタイプにも依存するということです。
"
を使用すると、PHPは文字列を解析して、その中に変数/プレースホルダーが使用されているかどうかを確認しますが、 '
のみを使用すると、PHPはそれを処理しますこれ以上の処理を行わない単純な文字列として。したがって、通常は '
の方が高速です。少なくとも理論的には。実際には、テストする必要があります。
結果(秒単位):
a, b, c are integers:
all inside " : 1.2370789051056
split up using " : 1.2362520694733
split up using ' : 1.2344131469727
a, b, c are strings:
all inside " : 0.67671513557434
split up using " : 0.7719099521637
split up using ' : 0.78600907325745 <--- this is always the slowest in the group. PHP, 'nough said
Zend Server CE PHP 5.3でこのコードを使用する:
<?php
echo 'a, b, c are integers:<br />';
$a = $b = $c = 123;
$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
$newstring = "$a and $b went out to see $c";
$t = xdebug_time_index() - $t;
echo 'all inside " : ', $t, '<br />';
$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
$newstring = $a . " and " . $b . " went out to see " . $c;
$t = xdebug_time_index() - $t;
echo 'split up using " : ', $t, '<br />';
$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
$newstring = $a . ' and ' . $b . ' went out to see ' . $c;
$t = xdebug_time_index() - $t;
echo 'split up using \' : ', $t, '<br /><br />a, b, c are strings:<br />';
$a = $b = $c = '123';
$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
$newstring = "$a and $b went out to see $c";
$t = xdebug_time_index() - $t;
echo 'all inside " : ', $t, '<br />';
$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
$newstring = $a . " and " . $b . " went out to see " . $c;
$t = xdebug_time_index() - $t;
echo 'split up using " : ', $t, '<br />';
$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
$newstring = $a . ' and ' . $b . ' went out to see ' . $c;
$t = xdebug_time_index() - $t;
echo 'split up using \' : ', $t, '<br />';
?>
他のヒント
2つの異なる構文であるため、速度に違いが生じる可能性があります。あなたが尋ねる必要があるのは、違いが重要かどうかです。この場合、いいえ、心配する必要はないと思います。その差はごくわずかです。
視覚的に最も意味のあることを行うことをお勧めします。 &quot; $ aと$ bは、$ c
&quot;を見るために出かけました。見ると少し混乱するかもしれません。あなたがそのルートに行きたいなら、変数を中括弧で囲むことをお勧めします:&quot; {$ a}と{$ b}は{$ c}
&quot;を見に出かけました。
簡単なベンチマークを行いましたが、他の人が言ったように、結果は非常に一貫性がありませんでした。二重引用符の代わりに単一引用符を使用すると、パフォーマンスが向上することはありませんでした。私の推測では、それはすべて好みに帰着するということです。
コーディングスタイルに合わせて1種類の引用符を使用することもできます。その場合は、二重引用符を選択してください。置換機能は、思っているよりも頻繁に便利です。
ベンチマークコード github に置きました。
このレベルでの文字列連結の速度が心配な場合は、間違った言語を使用しています。このユースケースに合わせてCでアプリケーションをコンパイルし、これが本当にがボトルネックの場合、PHPスクリプトで呼び出します。
はい、ただし違いはごくわずかです
$newstring = "$a and $b went out to see $c";
and
$newstring = $a . " and " . $b . " went out to see " . $c;
使用した場合:
$newstring = $a . ' and ' . $b . ' went out to see ' . $c;
違いはわずかに大きくなりますが(おそらくまだ無視できる程度です)、この理由は、正しく思い出せば(これは間違っているかもしれません)、PHPが変数と特別な二重引用符内のコンテンツをスキャンして解析するためです文字(\ t、\ nなど)を使用し、単一引用符を使用する場合、変数または特殊文字を解析しないため、速度がわずかに向上する可能性があります。
テストして、違いを比較してみませんか?数字が嘘をつかないのは、一方が他方よりも優れているとわかった場合、理由を尋ねる必要があります。
期間、差はありません。 ;)