Pergunta

Existe uma diferença de velocidade entre, digamos:

$ newString = "$ a e $ b saiu para ver $ c";

e

$ newString = $ a. "E". $ B. "Saiu para ver". $ C;

e em caso afirmativo, por quê?

Foi útil?

Solução

Dependendo na versão PHP, que varia de acordo com o quanto o segundo é mais rápido se você escrevê-lo como: $newstring = $a . ' and ' . $b . ' went out to see ' . $c;

PHP é muito inconsistente de versão para versão e construção para construir quando se trata de desempenho, você tem que testá-lo por si mesmo. O que nees a ser dito é que ele também depende do tipo de $a, $b e $c, como você pode ver abaixo.

Quando você usa ", PHP analisa a cadeia para ver se existem quaisquer variáveis ??/ espaços reservados utilizados no interior do mesmo, mas se você usar apenas trata PHP '-lo como uma seqüência simples sem qualquer processamento adicional. Então, geralmente ' deve ser mais rápido. Pelo menos em teoria. Na prática, você deve teste.


Os resultados (em segundos):

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

Usando este código com o 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 />';

?>

Outras dicas

É provável que haja uma diferença de velocidade, já que é duas sintaxes diferentes. O que você precisa perguntar é se a diferença é importante. Neste caso, não, eu não acho que você precisa se preocupar. A diferença seria muito insignificante.

Eu recomendo que você fazer o que faz mais sentido para você visualmente. "$a and $b went out to see $c" pode ser um pouco confuso quando olhar para ele. Se você queria ir por esse caminho, eu sugiro por chavetas em torno de suas variáveis:. "{$a} and {$b} went out to see {$c}"

Eu fiz uma referência rápida, e como já foi dito, os resultados foram muito inconsistente. Eu não notei qualquer ganho de desempenho usando aspas simples em vez das duplas. Meu palpite é que tudo se resume a preferência.

Você pode querer ficar com um tipo de cotação para o seu estilo de codificação, e se o fizer, escolha aspas duplas. O recurso de substituição vem a calhar com mais freqüência do que você pensa.

Eu coloquei o código de referência no github .

Se você está preocupado com a velocidade da concatenations cordas, a este nível, você está usando a linguagem errada. Compilar uma aplicação em C para este caso de uso e chamada que no seu script PHP, se este realmente é um gargalo.

Sim, há, no entanto, a diferença é muito insignificante entre

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

e

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

Se você usou:

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

A diferença seria ligeiramente maior (mas provavelmente ainda insignificante), a razão para isso é que, se bem me lembro (eu posso estar errado sobre isso), que PHP scans e analisa o conteúdo dentro de aspas duplas para variáveis ??e especial caracteres (\ t, \ n e assim por diante) e ao usar aspas simples que não analisa as variáveis ??ou caracteres especiais, portanto, pode haver um ligeiro aumento na velocidade.

Por que você não testá-lo e comparar a diferença? Os números não mentem, se você achar que um desempenho melhor do que o outro, então você deve perguntar o porquê.

Não há nenhuma diferença, período. ;)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top