Tras la sorpresa de Rendimiento de constantes en PHP, os puedo adelantar que esta vez, probablemente lo hagáis de nuevo.

Se trata de concatenar variables a cadenas.

La primera forma, usa cadenas delimitadas por comillas simples, y el operador punto. La segunda usa el método heredado de Perl, de incluir las variables dentro del literal, naturalente, usando comillas dobles. La tercera, es igual que la primera, pero con comillas dobles, mientras que la cuarta y última, usa sprintf.

<?php
	$KI_MAX_ITER = 500000;
 
	$fInicio=microtime(true);
	for ($iCont=0; $iCont<$KI_MAX_ITER; $iCont++)
	{
		$sRes = 'Esta es la iteración número ' . $iCont . ' de ' . $KI_MAX_ITER . ' en el bucle.';
	}
	$fFin=microtime(true);
	echo ($fFin - $fInicio) . '<br>';
 
	$fInicio=microtime(true);
	for ($iCont=0; $iCont<$KI_MAX_ITER; $iCont++)
	{
		$sRes = "Esta es la iteración número $iCont de $KI_MAX_ITER en el bucle.";
	}
	$fFin=microtime(true);
	echo ($fFin - $fInicio) . '<br>';
 
	$fInicio=microtime(true);
	for ($iCont=0; $iCont<$KI_MAX_ITER; $iCont++)
	{
		$sRes = "Esta es la iteración número " . $iCont . " de " . $KI_MAX_ITER . " en el bucle.";
	}
	$fFin=microtime(true);
	echo ($fFin - $fInicio) . '<br>';
 
	$fInicio=microtime(true);
	for ($iCont=0; $iCont<$KI_MAX_ITER; $iCont++)
	{
		$sRes = sprintf('Esta es la iteración número %d de %d en el bucle.', $iCont, $KI_MAX_ITER);
	}
	$fFin=microtime(true);
	echo ($fFin - $fInicio) . '<br>';
?>

Los tiempos obtenidos han sido:
– 0.59406280517578
– 1.1006951332092
– 0.59988689422607
– 0.61792397499084

Con el primero y el tercero, se confirma lo ya visto en Composición de cadenas, que las comillas simples, son más veloces, al requerir menos proceso.

El segundo, es decir, incluir las variables dentro de los literales, es mi primera sorpresa, daba por sentado que sería eficiente y cómodo, aunque siempre lo descarté por poco legible. Pues no os engañéis, es además casi 2 veces más lento.

Sorprende por último el cuarto sistema, donde sprintf, es solamente apenas un 2% más lento que las otras.