Я пишу приложение php для доступа к базе данных MySQL, и в учебнике он говорит что-то вроде
mysql_connect($host, $user, $pass) or die("could not connect");
Как PHP узнает, что функция завершилась неудачно, и запускает часть кристалла? Думаю, я спрашиваю, как работает часть «или». Не думаю, что видел это раньше.
php
mysql
exception-handling
conditional
Chustar
источник
источник
Ответы:
Если первый оператор возвращается
true
, тогда должен быть весь оператор,true
поэтому вторая часть никогда не выполняется.Например:
Таким образом, если ваш запрос завершится неудачно, он оценит
die()
оператор и завершит скрипт.источник
with
инструкция python , когда на самом деле это просто логическое выражение ... Я думаю, что при использовании этого выражения следует проявлять особую осторожность, если ожидается, что вы выполните очистку в случае ошибки. Пожалуйста, поправьте меня, если я ошибаюсь, но если вы это сделаетеfunc_call($file) or die();
и функция не работает, то файл останется открытым, когда скрипт умирает.or
в ситуациях, когдаif
может сработать?PHP
or
работает как C||
(который, кстати, также поддерживается PHP -or
просто выглядит лучше и имеет другой приоритет операторов - см. Эту страницу ).Он известен как оператор короткого замыкания, потому что он пропускает любые вычисления, если у него достаточно информации, чтобы определить окончательное значение.
В вашем примере, если
mysql_connect()
возвращает TRUE, то PHP уже знает, что весь оператор будет оцениваться как TRUE независимо от того, чтоdie()
оценивается, и, следовательноdie()
, не оценивается.Если
mysql_connect()
возвращает FALSE, PHP не знает, будет ли весь оператор оцениваться как TRUE или FALSE, поэтому он продолжает и пытается вычислитьdie()
- завершая сценарий в процессе.Это просто хороший трюк, в котором используется принцип
or
работы.источник
Это работает, как описали другие.
В PHP не используйте "die", поскольку он НЕ вызывает исключения (как в Perl). Вместо этого создайте исключение должным образом обычным способом.
die не может быть обнаружен в PHP и не регистрируется - вместо этого он печатает сообщение некрасиво и немедленно закрывает сценарий, никому ничего не сообщая и не давая вам возможности записать событие, повторить попытку и т. д.
источник
источник