En PHP, ¿deberían usarse operadores de comparación triples iguales (===) en lugar de dobles iguales (==) a menos que haya una razón particular para usar este último?


La mejor respuesta

¡Por supuesto!

En PHP, Javascript o cualquier otro lenguaje que ofrezca comprobaciones de equivalencia tanto estrictas como flexibles, es mejor usar la versión estricta a menos que tenga una razón convincente para hacer lo contrario . (¡De hecho, algunos desarrolladores de software insisten en que no utilice comprobaciones de igualdad imprecisas!) Hay varias razones para esto.

En primer lugar, el uso de equivalencias flexibles puede conducir a toda una clase de defectos. que se puede evitar con una estricta equivalencia. Aunque PHP es particularmente conocido por ser «útil», la mayoría de los lenguajes con escritura dinámica son indulgentes cuando se trata de convertir entre tipos. Los datos que pasan la equivalencia suelta pueden comportarse bien en muchos casos y profundizar mucho más en el código antes de desencadenar un error o causar un efecto secundario inesperado. Mientras tanto, las comprobaciones de equivalencia estrictas son más parecidas a los tipos de comprobaciones que se producen en los lenguajes de tipo estático; es mucho menos probable que los datos en un formato incorrecto se vuelvan locos.

Un problema relacionado es cómo la equivalencia flexible hace que el código sea más difícil de razonar. Si usa una equivalencia estricta, puede hacer muchas suposiciones sobre los datos que pasan la verificación. No ocurre lo mismo si usa una equivalencia flexible. Considere los dos ejemplos siguientes.

// Example #1: strict

if ( $i === 1 ) {

doThing( $i );

}

// Example #2: loose

if ( $i == 1 ) {

doThing( $i );

}

En el primer ejemplo, podemos suponer que la función «doThing» está siendo llamada con un valor numérico y solo necesitamos considerar cómo esa función manejaría los números.

En el segundo ejemplo, sin embargo, «doThing» podría llamarse con una variedad de tipos, incluidas cadenas o valores booleanos. Mientras lee la función «doThing», debe considerar cómo se puede manejar cada tipo, incluidas todas las reglas (y a veces sin sentido) relacionadas con las conversiones de tipos implícitas. ¡Eso es mucho para seguir en tu cabeza!

Además, al usar una equivalencia flexible, no estás siendo explícito. Esto no solo contribuye a la dificultad de razonar a través de la lógica, sino que tampoco capta los requisitos reales que se supone que representa la lógica. Con el ejemplo 2 anterior, no hay forma de saber si el programador original esperaba valores numéricos, valores de cadena, valores booleanos o alguna combinación de los mismos. Hace que mantener el código sea un dolor de cabeza.

Por último, aunque la conversión de tipos implícitos puede ser conveniente, hay poca necesidad en un entorno profesional. Siempre puede establecer valores predeterminados razonables o convertir manualmente los datos en el tipo apropiado. Esto puede requerir más código y más esfuerzo, pero también aumenta en gran medida la confiabilidad de su código.

Respuesta

Si sabe que dos valores deben tener el mismo tipo, entonces sí, use Strict ( ===) más suelto (==). Estricto tiene un mejor rendimiento porque no tiene que hacer conversión de tipos como lo hace el suelto.

Por ejemplo, 1 == «1» devuelve verdadero porque esa cadena se convierte en un número para verificar la igualdad

Mientras que 1 === «1» devuelve falso

La igualdad estricta prácticamente dice «¿no es del mismo tipo? FALSO «

Espero que esto ayude

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *