PHP String birleştirme - "Bir $ b"

7 Cevap php

Diyelim, arasında bir hız farkı var mı:

$ Dizge = "$ a ve $ b $ c görmek için dışarı çıktı";

ve

$newstring = $a . " ve " . $b . " went out to see " . $c;

ve if so, why ?

7 Cevap

Depending on the PHP version, it varies by how much the second is faster if you write it like: $newstring = $a . ' and ' . $b . ' went out to see ' . $c;

PHP is very inconsistent from version to version and build to build when it comes to performance, you have to test it for yourself. What nees to be said is that it also depends on the type of $a, $b and $c, as you can see below.

Eğer " kullandığınızda, PHP bunun içinde kullanılan herhangi bir değişkeni / tutucuları olup olmadığını dize görmek için ayrıştırır, ama sadece kullanırsanız ' PHP, herhangi olmadan basit bir dize olarak değerlendirir ileri işlem. Yani genel ' daha hızlı olmalıdır. Teorik olarak en az. Uygulamada Eğer must testi.


(Saniye olarak) sonuçları:

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 ile bu kodu kullanarak:

<?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 />';

?>

Iki farklı sözdizimi beri büyük olasılıkla, bir hız farkı olacaktır. Fark önemli ise ne sormak gerekir olduğunu. Bu durumda, hayır, ben endişeli olmaya gerek olduğunu sanmıyorum. Fark çok önemsiz olacaktır.

Ben görsel sizin için en mantıklı ne yapıyor tavsiye ederim. Ona bakarken "$a and $b went out to see $c" biraz kafa karıştırıcı olabilir. Eğer bu yolu gitmek istedim, ben senin değişkenler etrafında kıvırcık parantezi öneririm: "{$a} and {$b} went out to see {$c}".

Ben hızlı bir kriter yaptım, ve diğerleri söylediler, sonuçlar çok tutarsız. Ben tek tırnak yerine çift olanları kullanarak herhangi bir performans artışı fark etmedi. Benim tahminim o tüm aşağı tercihinize geliyor olmasıdır.

Eğer kodlama stili için teklif bir tür sopa istiyorum, ve bunu yaparsanız, çift tırnak seçebilirsiniz. Yedek özelliği daha sık düşündüğünüzden daha kullanışlı geliyor.

Ben kriter kod on github koydu.

Eğer bu düzeyde dize bitiştirmelerini hızı hakkında endişeleriniz varsa, yanlış dil kullanıyor. Bu kullanım durumda C bir uygulamayı derlemek ve bu really bir darboğaz ise, PHP komut diyoruz.

Evet orada olduğunu ancak arasındaki fark çok önemsiz

$newstring = "$a ve $b went out to see $c";

ve

$newstring = $a . " ve " . $b . " went out to see " . $c;

Eğer kullandıysanız:

$newstring = $a . ' ve ' . $b . ' went out to see ' . $c;

The difference would be slightly bigger (but probably still negligible), the reason for this is, if I recall correctly (I may be wrong on this), that PHP scans ve parses the contents within double quotation marks for variables ve special characters (\t, \n ve so on) ve when using single quotation marks it doesn't parse for variables or special characters, so there may be a slight increase in speed.

Neden test ve fark karşılaştırmak değil mi? Numaralar bir diğerinden daha iyi performans bulursanız, o zaman neden sormak gerekir, yalan söylemez.

NO fark dönemi vardır. ;)