5

Esta es quizás una pregunta dolorosamente básica para responder, pero me pregunto acerca de los problemas de rendimiento en relación con el uso de si son iguales!== frente si es igual!= para controlar el flujo de PHP.

considera la siguiente función PHP trivial:

<?php 
function test_json($json = NULL) { 
    if ($json != NULL) { 
    echo 'You passed some JSON.'; 
    } else { 
    echo 'You failed to pass any JSON.'; 
    } 
} 
?> 

Desde el punto de vista de rendimiento, es preferible emplear si son iguales (!==) para evitar PHP iteración a través de los tipos de variables, tratando de encontrar una comparación válida?

I Asumo que !==primera compara los tipos de variables, y si eso falla, devuelve inmediatamente FALSE? He usado != desde PHP3 casi como un reflejo. Ahora que estoy trabajando en proyectos mucho más intensivos en cómputo, las consideraciones de rendimiento minuto se vuelven más preocupantes.

¡Otros comentarios sobre la optimización del control de flujo son, por supuesto, bienvenidos!

+1

Cuando consideraciones de rendimiento se convierten en una preocupación real, trate también de perfiles. Ese no importará en comparación con la llamada de función. – mario

+0

@mario Yup. Simplemente tengo curiosidad acerca del operador de comparación ya que la idea me vino a la mente mientras escribía una función (cuestionando mis hábitos). – msanford

Respuesta

7

no he hecho ninguna prueba de rendimiento de suelta vs operadores de comparación estrictas, pero para lo que estamos tratando de hacer, me gustaría recomendar en lugar algo así como

if (!is_null($json)) { 
    do_stuff() 
} 

Más información sobre is_null() en http://www.php.net/manual/en/function.is-null.php

EDITAR: una nota en los comentarios de la página php vinculada anteriormente tiene algunos resultados que muestran que el operador === es ligeramente más rápido que el operador ==, ambos son más rápidos que is_null(). Sin embargo, otra nota señala que "la diferencia de tiempo de ejecución entre === NULL e is_null es inferior a 250 nanosegundos. Ve a optimizar algo que importa". Tendría que estar de acuerdo allí. Entonces todo lo dicho, sugeriría que vaya con lo que considere más legible.

+1

+1, Ejecutando una prueba con 1 000 000 comparaciones cada una en un ciclo comparando un valor a 'NULL' ; '==', '===' y 'is_null()', entiendo que '==' y '===' son más o menos los mismos '===' siendo * un poco * más rápidos y 'is_null()' tomando aproximadamente el doble de tiempo. Sin embargo, como una cuestión de gusto personal, prefiero 'is_null()' no obstante, 'NULL == NULL' debe ser falso (* pero no es *) y' is_null() 'captura esa noción. – zrvan

+0

Excelente punto sobre 'NULL == NULL'. Tiendo a equivocarme por el lado de las funciones incluidas en un idioma donde sea posible por esta razón exacta: es probable que manejen adecuadamente casos de esquina extraños en los que nunca hubiera pensado, lo que significa menos depuración después. –

+0

Grandes puntos. ¡Gracias a todos! – msanford

Cuestiones relacionadas