2011-08-06 5 views
5

Me he encontrado con un uso interesante de || operador en un comando de retorno, y agradecería que si alguien puede confirmar exactamente lo que está pasando (si lo entiendo, lo puedo usar mi mismo en el futuro)Confirmación de uso de OR (||) en un comando de retorno

El código es

 
    return (
     empty($neededRole) || 
     strcasecmp($role, 'admin') == 0 || 
     strcasecmp($role, $neededRole) == 0 
    ); 

$ neededRole y el papel $ son o nula, 'admin' o 'administrador'

lo estoy leyendo como:
Si $neededRole está vacía, no se necesitan más controles. Devuelva verdadero (y deje de verificar)
Si ($role == 'admin') permite el acceso, sin importar el rol requerido. Devuelva verdadero (y deje de verificar)
si ($role == $neededRole) luego permita el acceso. Devuelve verdadero (y deja de verificar)

Supongo que al llegar a un 'verdadero' que la comprobación se detiene, y si llegó al final de la línea sin tener un 'verdadero', se establecerá como falso.

¿Estoy cerca de la marca?

+0

olvidó añadir, si hay un nombre para esta técnica, me gustaría saber para leer más en este tema –

Respuesta

7

Sí, estás en lo cierto. Esto se llama short-circuit evaluation. El valor de retorno final si todas las condiciones se evalúan como falsas será false || false || false, que es falso.

Como nota al margen, esto también funciona con el operador &&, pero detiene la evaluación cuando la primera expresión da como resultado un valor de false.

0

Sí, tiene usted razón

ver un ejemplo en manual

// foo() will never get called as those operators are short-circuit 
$a = (false && foo()); 
$b = (true || foo()); 
$c = (false and foo()); 
$d = (true or foo()); 
Cuestiones relacionadas