2010-05-06 10 views
6

¿Existe alguna forma mejor (es decir, más legible) para escribir esto?"Mejor" forma de escribir esto?

if (isset($input_vars['directive']) && $input_vars['directive'] == 'edit') { 
+6

Creo que es lo suficientemente legible, ¿por qué quieres cambiarlo? Además, la legibilidad también depende de lo * que * pienses que sea legible, no tanto de nosotros. –

+0

Es lo más legible posible. –

+0

¿para qué sirve esta matriz $ input_vars? ¿Cómo es que esa variable definida por el usuario no se puede configurar? La única razón para tener una matriz de este tipo es llenarla con claves predefinidas, haciendo que todas estas claves estén siempre configuradas, por lo que no es necesario verificar con isset(). De lo contrario, ¿por qué no usar $ _REQUEST? –

Respuesta

5

Desafortunadamente no. Puede envolver este código en una función y simplemente llamarlo cada vez que lo necesite.

function compareArrayItem($array, $key, $value) { 
    return isset($array[$key]) && $array[$key] == $value; 
} 

if (compareArrayItem($input_vars, 'directive', 'edit')) { 
    // Do something 
} 

Pero eso parece una especie de sentido para mí (y menos legible que el código original). O bien, podría reducir el nivel de informe de errores para no incluir E_NOTICE, para que no necesite la primera expresión.

error_reporting(E_ALL^E_NOTICE); 

if ($input_vars['directive'] == 'edit') //... 

Pero no recomendaría hacer esto solo por el bien de acortar su código.

Si yo fuera usted, solo lo dejo en paz. Está bien tal como está.

+0

'$ input_vars' se envuelve' $ _POST' y '$ _GET', por lo que no puede simplemente" configurarse antes ". No sé por qué los desarrolladores originales hicieron esto, y no solo usaron '$ _REQUEST'. –

+0

@ gms8994: Entonces simplemente déjalo en paz. Se ve bien y legible para mí. Puede ser un poco más largo de lo ideal, pero eso no es algo de qué preocuparse, IMO. Sin embargo, es posible que desee editar su pregunta para incluir esa información, porque eso es importante ... –

-1

Lo siguiente arrojaría el mismo resultado cada vez.

if($input_vars['directive'] == 'edit'){ 

Esto es porque si no está configurado, entonces no es 'editar', si es 'editar' entonces su conjunto.

Esto devuelve un aviso pero puede desactivarlo (no diciendo que debería) de su instalación de PHP.

+1

¿No se van a escupir los errores de ese valor no está configurado en absoluto? –

+3

Recibirá un aviso sobre un índice inexistente si la clave de directiva no está configurada. – Simon

+0

Lo probé y es porque mi sistema tiene avisos apagados. Podrías hacer eso también si quieres. –

-2

yo diría:

if(@$input_vars['directive']=='edit') { 

sería un poco más fácil de leer y que no produce advertencias si la directiva no está allí.

+1

esto no es recomendable. Las advertencias silenciosas al usar * @ * pueden hacer que el código sea demasiado difícil de seguir. También la sobrecarga por hacer es mucho –

+0

ahora tenemos dos problemas. – GOD

0

Voy a adivinar que probará $ input_vars ['directive'] contra más de un valor (de lo contrario, ¿por qué no tendría simplemente un booleano simple almacenado en $ input_vars ['edit'] o ¿similar?). También me atrevería a adivinar que estás haciendo esas pruebas una tras otra (si 'edit' haces X, de lo contrario si 'display' lo haces).

En tal caso, simplemente coloque la prueba isset() en una instrucción if y anote las otras dentro de esa (switch/case flow no sería una mala elección).

1

Si se conoce el conjunto de valores permitidos en $input_vars y los controles que mencionas son por todo el lugar la siguiente función auxiliar hará:

function item ($array, $key) { 
    if (isset ($array [$key])) 
     return $array [$key]; 
    else 
     return NULL; // Or use whatever is more appropriate 
}

A continuación, el código original se puede cambiar para parecerse

if (item ($input_vars, 'directive') == 'edit') { ... 

Esto no solo es más legible, sino que también elimina la duplicación: tanto la variable de matriz como la clave aparecen solo una vez.

Cuestiones relacionadas