2011-08-08 12 views
6

que iba en la sección de precedencia de los operadores de php.net y se encontró con this example que diceDiferencia entre "&&" y "y": La precedencia de operadores y los cortocircuitos

$a = 1; 
$b = null; 
$c = isset($a) && isset($b); 
$d = (isset($a) and isset($b)); 
$e = isset($a) and isset($b); 
var_dump($a, $b, $c, $d, $e); 
//Result: 
int(1) 
NULL 
bool(false) 
bool(false) <== I get this 
bool(true) <== I do not get this 

utilizo un buen montón de depuración y declaraciones verbose print (_r) en mi código para hacer un seguimiento de dónde estoy en el código. Entonces uso $debug and print_r($dataArray) o $verbose and print "Updating dataArray\n" como declaraciones separadas entre el código, lo que me permite controlar estas instrucciones de impresión (_r). Esto proviene de mi experiencia en BASH donde solía escribir mucho de [[ $condition ]] && { #Do if true } || { #Do if false }. En BASH, sabía que estaban en cortocircuito y usé este hecho para escribir muchas líneas simples.
Ahora estoy observando que gran parte de esta práctica (de escribir $verbose and print) se está arrastrando lentamente en mis declaraciones if. Soy consciente de que esto es NO es una práctica recomendada y me puede morder en el atrás. Sin embargo, sí quiero dominar esta habilidad, ya que me gusta escribir esos diseños y quiero usarlo como mi estilo personal.

Así que mi pregunta (s) es (son):

  1. Qué operador (o &&and) está en cortocircuito?
  2. El manual dice && tiene prioridad sobre and, pero alguien puede ejemplificar esto al mezclar la característica/funcionalidad/característica de cortocircuito del operador con la precedencia del operador. (básicamente mezcla y coincidencia de precedencia y cortocircuito)

Se elabora especialmente la naturaleza de cortocircuito y el valor de retorno de los operadores.

PD: 1. Espero que la asociatividad de estos operadores sea igual e intuitiva, pero si conoce alguna peculiaridad, por favor, infórmeme.
PD: 2. Si todavía desea avisarme de los peligros de dicha práctica, incluya amablemente ejemplos.

EDIT: Después de cambiar mi código simple $var = mysql_(...) or die() reemplazando or con ||, descubrí lo molesto que puede ser el uso de los || y && operadores en lugar de and y or. ¡El código simplemente no funcionó! A mi entender, la construcción anterior asigna un valor de retorno de TRUE o FALSE a $var, que a su vez hace todo el uso secuencial de $var para generar un comportamiento de advertencia/error/inesperado. La última construcción asigna el resultado de mysql_(...) a $var primero y luego evalúa el compuesto de = y die.
Esta es una buena lección para mí, es mejor 1. Comience a usar PDO/mysqli y maneje los errores por mi cuenta 2. Piénselo dos veces antes de escribir algo que llamé anteriormente como estilo personal.
// Nota al uno mismo: no utilice experiencia de uno de scripting/lenguaje interpretado, mientras que la escritura de código en otro, cada uno es único y tiene sus propias peculiaridades y dificultades, y eso es muy triste * suspiro *

+0

posible duplicado de [Referencia - ¿Qué significa este símbolo en PHP?] (Http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php) – Gordon

+0

@Gordon : Gracias por la referencia_. Revisé la lista y aunque algunas preguntas parecen responder a una parte de las preguntas (como la precedencia, que ya sabía). En mi humilde opinión, la naturaleza del cortocircuito de los operadores junto con su precedencia no se discute en detalle. – Sudhi

+0

El autor del comentario en el enlace de ejemplo menciona la precedencia del operador que indica que la palabra clave AND se está evaluando después de los iguales. Parece extraño, pero me recuerda algunas de las líneas 'mysql_connect (...) or die()' que usan algunos scripts. –

Respuesta

7

El código

$e = isset($a) and isset($b); 

se analiza el mismo que

($e = isset($a)) and isset($b); 

por lo tanto $e, como se determina por isset($a) y la asignación, es true - independiente de evaluati ng isset($b).

+1

Para que quede claro: no está relacionado con cortocircuitos. –

+0

@Felix: ¿puede escribir/explicar/elaborar sobre cortocircuitos en PHP? Estoy especialmente preocupado por el valor de retorno que se genera después del cortocircuito. – Sudhi

+1

@Sudhi: No entiendo lo que quieres que escriba. Todos estos operadores ('&&', '||', 'y',' o') están en cortocircuito ... el valor de retorno siempre es un valor booleano. –

Cuestiones relacionadas