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):
- Qué operador (o
&&
and
) está en cortocircuito? - El manual dice
&&
tiene prioridad sobreand
, 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 *
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
@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
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. –