Estou escrevendo um aplicativo php para acessar um banco de dados MySQL e, em um tutorial, ele diz algo na forma
mysql_connect($host, $user, $pass) or die("could not connect");
Como o PHP sabe que a função falhou para que ele execute a parte do molde? Acho que estou perguntando como a parte "ou" disso funciona. Acho que não vi isso antes.
php
mysql
exception-handling
conditional
chustar
fonte
fonte
Respostas:
Se a primeira instrução retornar
true
, então a instrução inteira deve ser,true
portanto, a segunda parte nunca é executada.Por exemplo:
Portanto, se sua consulta não for bem-sucedida, ele avaliará a
die()
instrução e encerrará o script.fonte
with
declaração de python , quando na verdade é apenas uma expressão booleana ... Acho que um cuidado extra deve ser tomado ao usar essa expressão se for esperado que você execute uma limpeza no caso de erros. Por favor, corrija-me se eu estiver errado, mas se você corrigirfunc_call($file) or die();
e a função falhar, o arquivo será deixado aberto quando o script morrer.or
em situações onde umif
poderia trabalhar?O PHP
or
funciona como o C||
(que, aliás, também é suportado pelo PHP -or
é mais bonito e tem precedência de operador diferente - veja esta página ).É conhecido como operador de curto-circuito porque irá ignorar qualquer avaliação assim que tiver informações suficientes para decidir o valor final.
Em seu exemplo, se
mysql_connect()
retornar TRUE, então o PHP já sabe que toda a instrução será avaliada como TRUE, não importa odie()
quedie()
seja avaliado e, portanto, não é avaliada.Se
mysql_connect()
retornar FALSE, o PHP não sabe se a instrução inteira será avaliada como TRUE ou FALSE, então continua e tenta avaliardie()
- terminando o script no processo.É apenas um truque legal que aproveita a maneira como
or
funciona.fonte
Funciona como outros descreveram.
No PHP, não use "die", já que NÃO levanta uma exceção (como faz em Perl). Em vez disso, lance uma exceção corretamente da maneira normal.
O dado não pode ser capturado em PHP e não registra - em vez disso, ele imprime a mensagem sem graça e fecha imediatamente o script sem dizer nada a ninguém ou dar a você qualquer oportunidade de registrar o evento, tentar novamente, etc.
fonte
fonte