2010-08-31 18 views
7

Si consigo una variable y no sé que se establece o no puedo escribirPHP prácticas de codificación

if (isset($a) && $a > 2) 

o puedo escribir

if (@ $a > 2) 

que es más corto. ¿La segunda sintaxis es buena o no?

+0

Si se establece $ a y no falsa o nula – Andrew

+0

@ Andrew Eso es lo que pensé, pero que parece demasiado general para cualquier condicional. Probablemente sea mejor simplemente usar! = False o si es un número> 0 o si es una cadena, compruebe su longitud> 0 o algo así. – Chris

+0

dependiendo de lo que quiere permitir $ a, ['empty'] (http://de2.php.net/manual/en/function.empty.php) podría ser lo que está buscando. – Gordon

Respuesta

10

I totally sympathize, pero la supresión del error con @es mala práctica.

El error todavía ocurre, simplemente se suprime. Sin embargo, cuesta cantidades microscópicas de tiempo que pueden acumularse mucho si se realizan en bucles.

Además, le quita la posibilidad de utilizar avisos de "variable indefinida" para su ventaja: como un mecanismo para evitar errores tipográficos.

15

La expresión if(@$a) no comprueba si la variable está configurada o no. El símbolo @ simplemente suprime cualquier advertencia que sea un mal estilo de codificación.

2

La función isset comprueba si existe una variable y si no es nula. No estoy muy seguro de lo que quiere lograr con el & & $ a.

El operador @ suprime los mensajes de error generados por la expresión a la que se antepuso.

3

El primer enfoque es el enfoque correcto. El segundo enfoque es muy malo. terminarás con errores suprimidos y ni siquiera lo sabrías. y un día tendrás errores apareciendo que no podrás depurar esa mala práctica.

2

Como la gente ya dijo, la primera variante es el camino a seguir. En realidad no me gusta la variante (/ * */& & $ var) para comprobar si la variable está vacía. Yo prefiero usar

if (isset($var) && !empty($var)) { 
    /* foo */ 
} 

o simplemente

if (!empty($var)) { 
    /* foo */ 
} 
+0

Sin embargo, si $ var es '0', no está 'vacío', pero aún devuelve verdadero de 'empty()'. Esto te morderá en la grupa en algún momento. –

+0

En realidad no, porque lo sé ..:-) Puede agregar que isset() omite una variable si está configurada como NULL. Por lo tanto, con frecuencia tiene la necesidad de realizar comprobaciones como: 'if ((isset ($ x) && empty ($ x)) || is_null ($ x)) {/ * establecer el parámetro de procedimiento almacenado en String" NULL "* /}' Pero seguro: si está buscando el dígito cero, entonces no usará empty()! –

Cuestiones relacionadas