2010-07-23 54 views
19

¿Es mejor concatenar una variable (por ejemplo, $name) en una cadena existente (por ejemplo, $string) así:¿Comillas simples o comillas dobles para concatenación variable?

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

o para integrar la variable de la cadena como esta:

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

o es mejor utilizar una función como esta:

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

¿Qué es mejor en términos de tiempo de procesador/eficiencia ?

+0

Yo diría que, depende de dónde provienen esos datos ... la entrada del usuario o la entrada del sistema – Prix

+0

¿Habría diferencias de rendimiento? es decir, ¿más tiempo de procesador con cada uno? – ina

+1

posible duplicado de [PHP - "Sal's mall is $ emo" vs "Sal's mall is". $ Emo - cadena con comillas de eficiencia de concatenación] (http://stackoverflow.com/questions/3394166/php-sals-mall-is -emo-vs-sals-mall-es-emo-string-with-quotes-concaten) –

Respuesta

25

Todos los que hicieron la prueba concluyeron que el uso de comillas simples es marginalmente mejor en cuanto al rendimiento. Al final, las comillas simples resultan en una concatenación, mientras que las comillas dobles fuerzan al intérprete a analizar la cadena completa de las variables.

Sin embargo, la carga adicional de hacerlo es tan pequeña para las últimas versiones de PHP que la mayoría de las veces la conclusión es que realmente no importa.

Entonces para las personas de rendimiento: use comillas simples. Para el "me gusta mi código legible" -personas: las comillas dobles son mucho mejores para la legibilidad, como ya señaló Flavius ​​Stef.

Editar: Una cosa sin embargo: si va a utilizar un dólar en su cadena sin una variable, ¡utilice comillas simples para asegurarse! (http://www.weberdev.com/get_example-3750.html señala que tomará 4 veces más tiempo para analizar esas cadenas)

+7

"todos los que hicieron la prueba ..." ¿fuente de datos? – ina

+1

http://classyllama.com/development/php/php-single-vs-double-quotes/ http://www.procata.com/blog/archives/2005/03/08/microbenchmarks-of-single- and-double-qouting/ Aquí hay 2. google puede darte mucho más. – Blizz

+0

Creo que la prueba ni siquiera es necesaria. Es solo una cuestión de número de instrucciones del procesador. Cuanto menos tengas (que puede ser fácilmente adivinable en este caso), más rápido serás. – snowflake

0

No importa desde la perspectiva de la sintaxis. Ambas variantes son correctas. Usa lo que te sientas más cómodo.

Personalmente, me siento mejor cuando uso el $string="Hi, my name is $name", porque no necesita meterse con las comillas. Simplemente imagina la compleja consulta SQL con, digamos, 10 variables ...

7

Por lo general, considero que utilizar la interpolación de cadenas ("Hi, my name is $name") es mejor desde el punto de vista de la legibilidad.

0

PHP es bastante lento:

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

Slide # 3

Así que no se preocupe demasiado por poco optimizaciones como estas.

Sin embargo, se debe enfocar más en el uso de APC para almacenar en caché su código en código de bytes. Verás grandes ganancias de velocidad para el proyecto.

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

¡Esta es la mejor manera, en el sentido de la combinación de php y html!

o como esto:

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

Ésta es la manera antigua!

O así:

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

Esto es lo que un programador que viene de lenguajes de programación de cliente de Visual Basic u otros escribiría!

Espero que haya sido útil.

+1

No estoy de acuerdo con que '" Hola, mi nombre es $ name "' es "viejo", y que ''Hola, mi nombre es'. $ Name' es de alguna manera mejor! – Josh

0

En lo personal, si es sólo una variable normal, o incluso una propiedad de clase, me gustaría escribir así:

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

Sin embargo, si estoy usando valores de la matriz entonces voy a concatenar con una sola citas.

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

Espero que esto tenga sentido. Se trata de encontrar convenciones y apegarse a ellas.

+0

Su ejemplo de matriz funciona perfectamente sin la concatenación. '... desde un {$ text ['random']} array ', o' ... desde un $ text [random] array'. Solo debe * tener * para usar el método {} si está haciendo referencia a una matriz multidimensional, ya que el analizador de PHP no es codicioso. '$ array [x] [y]' se analizará como ''. –

+0

Sí. Pero encuentro que el uso de llaves en cuerdas me resulta un poco feo. Como digo, es solo un ejemplo de cómo personalmente concateno cadenas con variables. –

11

La diferencia entre comillas simples y dobles en PHP es que las comillas dobles son "inteligentes" en que analizarán las variables cuando se leen, mientras que las comillas simples son "tontas" y no intentarán analizar ningún carácter en la cadena .

Esto produce algunas pequeñas diferencias en los caracteres que puede usar; Básicamente, el único personaje que necesita para escapar al utilizar comillas simples es un solo misma cita:

'\'' 

Mientras que si utiliza comillas dobles que tiene que escapar de otros personajes:

"\$" 

sino que también permite para algunas cosas ingeniosas como la adición de una nueva línea al final:

"my string\n" 

con comillas simples que tendría que hacer una concatenación:

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

En general, las comillas simples son más rápidas porque son "tontas".

Sin embargo, normalmente uno no debería realmente preocuparse por estos problemas, que se denomina optimización prematura, y debe evitarse.

Un par de palabras sobre la optimización: en general, uno primero debe escribir el programa de la forma en que debería funcionar, y luego encontrar los cuellos de botella más grandes y corregir los particulares. Si la velocidad de la secuencia realmente es un problema para usted en PHP, es posible que desee considerar cambiar a otro idioma.

Respecto a la velocidad: es probable que desee centrarse más en el uso de la memoria que en el tiempo de la CPU. En estos casos, el tiempo de CPU podría considerarse bastante constante. El tiempo de CPU es más relevante cuando se escriben algoritmos que se iterarán muchas veces.

En cuanto a las concatenaciones: cuanto más concatenas cadenas usando el operador de punto, más memoria usarás.

Considera:

$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; 
+2

Otra forma: 'echo $ str1, $ str2;' – nyuszika7h

0

Mi lema y la respuesta es: dejar a los compiladores de escribir código máquina. Te diré lo que quiero decir ...

Utilice comillas simples cuando no necesite incluir variables PHP, de lo contrario, utilice comillas dobles. No se preocupe por el rendimiento solo use APC en los servidores de producción. En su lugar, concéntrese en escribir el código más fácil de mantener; use comentarios, comillas dobles, etc. correctamente aunque puedan ralentizar el código. Cada optimización que disminuye la capacidad de mantenimiento/legibilidad del código es mala, deje que el código de operación -cachers y compiladores conviertan su código en código máquina, no lo haga usted mismo ... ofuscando su código fuente debido a la optimización de los incendios.

5

Para obtener un rendimiento, como otros han demostrado, es ligeramente más rápido de usar comillas simples en lugar de comillas dobles.

Las comillas simples, si se aplican a la legibilidad y se mantienen alejadas de la subjetividad, en realidad agregan más "ruido". El ruido y cómo se relaciona con la legibilidad se habla mucho en el Código de limpieza del libro y uno podría concluir que cuanto más espacios en blanco no se ve, más dificulta la legibilidad. Si se aplica a la subjetividad, la mayoría de los lugares que he tomado el tiempo para leer en realidad prefieren una comilla doble.

Use su criterio.

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

es mucho más fácil de leer que:

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

Admito que:

$var = "My string."; 

se ve casi lo mismo que:

$var = 'My String.'; 

Sin embargo este último introduce menos ruido y cuando hay muchos códigos aro y todo ayuda, sin mencionar los otros beneficios que se obtienen al usar comillas simples.

Al final, prefiero KISS. Use comillas simples a menos que necesite comillas dobles. Convenciones simples que son más fáciles de escribir, más fáciles de mantener, más fáciles de analizar y más fáciles de leer.

Cuestiones relacionadas