Tenía curiosidad por saber que es más eficiente a la hora de comprobar cadenas vacías en PHP. Hay dos formas básicas de hacer esta comprobación, una es utilizando la función «empty»:
if(empty($cadena)) { //Tu código }
La otra forma es compararla contra una cadena vacía:
if($cadena == '') { //Tu código }
¿Pero que método es más rápido?. Bueno, hice una prueba rustica, aclaro: Esta prueba la hice en mi PC, por lo que los resultados pueden variar en otros ordenadores, lo recomendable es que probéis vosotros mismos a ver que resultados obtenéis. Yo utilicé Apache 2, PHP 5, sobre un Mandriva 2010 a 32 bits. El procesador es un AMD Turion 64 X2 a 1.6 Ghz. con 2GB de RAM.
Bueno, el código de prueba fue este:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | < ?php $cadena1 = ''; $cadena2 = 'Cadena de Texto'; $inicio3 = microtime(true); for($i = 0; $i < 5000000; $i ++) { if($cadena1 == ""); } $fin3 = microtime(true); $inicio4 = microtime(true); for($i = 0; $i < 5000000; $i ++) { if($cadena2 == ""); } $fin4 = microtime(true); $inicio1 = microtime(true); for($i = 0; $i < 5000000; $i ++) { if(empty($cadena1)); } $fin1 = microtime(true); $inicio2 = microtime(true); for($i = 0; $i < 5000000; $i ++) { if(empty($cadena2)); } $fin2 = microtime(true); $res1 = $fin1 - $inicio1; $res2 = $fin2 - $inicio2; $res3 = $fin3 - $inicio3; $res4 = $fin4 - $inicio4; echo 'Cadena vacía con empty(): '.$res1.'<br>'; echo 'Cadena con texto con empty(): '.$res2.'<br />'; echo 'Cadena vacía con comillas: '.$res3.'<br />'; echo 'Cadena con texto con comillas: '.$res4.'<br />'; ?> |
Y los resultados fueron:
Cadena vacía con empty(): 2.6672089099884
Cadena con texto con empty(): 2.6182219982147
Cadena vacía con comillas: 3.252051115036
Cadena con texto con comillas: 3.3506021499634
Como pueden notar en el código, cada comprobación se ejecutó cinco millones de veces, con una diferencia promedio de 0.6 segundos. Lo cual puede significar mucho cuando hablamos de la Web. Pero como dije antes, estos son mis resultados, y puede que en otras máquinas los resultados sean diferentes.
¿Habéis probado el script por sí mismos? ¿qué resultados habéis obtenido?.
Saludos.