Estoy escribiendo una aplicación php para acceder a una base de datos MySQL, y en un tutorial, dice algo de la forma
mysql_connect($host, $user, $pass) or die("could not connect");
¿Cómo sabe PHP que la función falló para ejecutar la parte del troquel? Supongo que estoy preguntando cómo funciona la parte "o". No creo que lo haya visto antes.
php
mysql
exception-handling
conditional
chustar
fuente
fuente
Respuestas:
Si la primera declaración regresa
true
, entonces la declaración completa debe ser,true
por lo tanto, la segunda parte nunca se ejecuta.Por ejemplo:
Por lo tanto, si su consulta no tiene éxito, evaluará la
die()
declaración y finalizará el script.fuente
with
declaración de Python , cuando en realidad es solo una expresión booleana ... Creo que se debe tener especial cuidado al usar esta expresión si se espera que realice una limpieza en caso de errores. Por favor, corríjame si me equivoco, pero si lo hacefunc_call($file) or die();
y la función falla, el archivo se deja abierto cuando los scripts mueren.or
en situaciones en las queif
podría funcionar?PHP
or
funciona como C||
(que, por cierto, también es compatible con PHP;or
simplemente se ve mejor y tiene una precedencia de operadores diferente; consulte esta página ).Se le conoce como operador de cortocircuito porque omitirá cualquier evaluación una vez que tenga suficiente información para decidir el valor final.
En su ejemplo, si
mysql_connect()
devuelve TRUE, entonces PHP ya sabe que toda la declaración se evaluará como TRUE sin importar lo que sedie()
evalúe y, pordie()
lo tanto, no se evalúe.Si
mysql_connect()
devuelve FALSE, PHP no sabe si toda la declaración se evaluará como VERDADERO o FALSO, por lo que continúa e intenta evaluardie()
, terminando el script en el proceso.Es solo un buen truco que aprovecha la forma en que
or
funciona.fuente
Funciona como otros han descrito.
En PHP, no use "morir", ya que NO genera una excepción (como lo hace en Perl). En su lugar, lanza una excepción correctamente de la forma habitual.
die no se puede capturar en PHP y no se registra; en su lugar, imprime el mensaje sin gracia e inmediatamente sale del script sin decirle nada a nadie ni darle la oportunidad de grabar el evento, reintentar, etc.
fuente
fuente