valor not multidimensional item exist check buscar array php if-statement

not - php in array key



¿Es esta una prueba correcta para ver si se establece una variable? (5)

Ayer, publiqué una respuesta a una pregunta que incluía varios (muy desconocidos para mí en ese momento) ejemplos de códigos muy malos. Desde entonces, he estado mirando mis conocimientos fundamentales de PHP que me permitieron pensar que tal código es posible. Esto me lleva a una pregunta que parece que no puedo encontrar una respuesta a:

Si deseo verificar si una variable tiene algo establecido, ¿es una práctica válida no usar isset() u otra función auxiliar? aquí hay un "por ejemplo":

if($not_set){ //do something } else { //do something else }

Más bien que...

if(isset($not_set)){ //do something } else { //do something else }

Desde el nombre de la variable, puede ver que esta variable no está configurada. Por lo tanto, el condicional sería falso y la porción else se ejecutaría. Hasta ahora he estado usando esta práctica, pero después de los mensajes de ayer, ahora tengo una idea de que esto está mal.

He aquí por qué pensé que sería una buena práctica dejar de lado la función isset() arriba. Desde el manual de PHP:

El constructo if es una de las características más importantes de muchos idiomas, incluido PHP. Permite la ejecución condicional de fragmentos de código. PHP presenta una estructura if que es similar a la de C:

declaración if (expr)

Como se describe en la sección sobre expresiones, la expresión se evalúa a su valor booleano. Si la expresión se evalúa como VERDADERO, PHP ejecutará la instrucción, y si se evalúa como FALSA, la ignorará. Se puede encontrar más información sobre qué valores evaluar a FALSO en la sección "Convertir a booleano".

Y desde la sección ''Conversión a booleana'':

Al convertir a booleano, los siguientes valores se consideran FALSOS:

... * el tipo especial NULL (incluidas las variables no ajustadas)

¿Por qué el manual saldría de su camino para indicar que las variables no incluidas se incluyen si esta es una mala práctica? Si no está configurado, se convierte a NULL y, por lo tanto, se evalúa correctamente mediante el condicional. El uso de isset() encontrará el mismo resultado, pero tomará ciclos adicionales para hacerlo.

¿Puede alguien por favor aclararme si he estado equivocado todo este tiempo y por qué? (¿Y qué tan malo es, tal vez?)

Gracias, TAN, nunca decepcionas.

Editar: Gracias a todos (y eso fue rápido). Honestamente, creo que todas las respuestas hasta ahora son geniales y no sé a cuál elegir para la respuesta ... Si la tuya no es elegida, seguiré votando: o)


Es una práctica común, pero no es buena. ¡Siempre debe usar isset !

¡Si su $not_set está configurado, y es un bool con el valor false , su "prueba" fallará!


Está bien, pero no es una buena práctica usar if busca una variable establecida. Dos razones fuera de mi cabeza:

  1. El uso de isset deja clara la intención: que está comprobando si la variable está configurada y no está comprobando si una condición es verdadera.
  2. if ($not_set) evaluará a false cuando $not_set está realmente configurado pero es igual a boolean false .

Si la variable no está configurada, recibirá un Notice . Si usa isset() no recibe un aviso. Entonces, desde un punto de vista de reporte de error, usar isset() es mejor :)

Ejemplo:

error_reporting(E_ALL); if($a) { echo ''foo''; }

da

Notice: Undefined variable: a in /Users/kling/test on line 5

mientras

error_reporting(E_ALL); if(isset($a)) { echo ''foo''; }

no produce nada

La conclusión: si la calidad del código es importante para usted, use isset() .


Usted correrá a problemas si su variable está configurada, pero se evalúa como FALSA, como la siguiente:

  • el booleano FALSE en sí mismo
  • el entero 0 (cero)
  • el flotador 0.0 (cero)
  • la cadena vacía y la cadena "0"
  • una matriz con cero elementos
  • un objeto con variables miembro cero (solo PHP 4)
  • el tipo especial NULL (incluidas las variables no ajustadas)
  • Objetos SimpleXML creados a partir de etiquetas vacías

Tomado del manual de PHP.

Básicamente, el uso de isset () muestra que está comprobando explícitamente si existe una variable y no es NULL, mientras que la estructura de su sentencia if solo verifica si la variable es verdadera. Es más claro y menos propenso a errores.


isset funciona como un guardia que le impide usar variables que en realidad no existen.
if (isset($foo)) y if ($foo) no significan lo mismo. isset solo le dice si la variable realmente existe y si está bien usarla, no evalúa el valor de la variable en sí * .

Por lo tanto, generalmente debe usar uno de estos dos patrones:

Si la variable está segura de existir y solo quieres verificar su valor:

if ($foo == ''bar'')

Si la variable puede o no existir, y desea verificar su valor:

if (isset($foo) && $foo == ''bar'')

Si solo le interesa que una variable esté configurada y se evalúe como true , es decir, if ($foo) , puede usar empty :

if (isset($foo) && $foo) // is the same as if (!empty($foo))

* verifica null , donde null es tan bueno como no estar configurado en absoluto