Я пишу приложение php для доступа к базе данных MySQL, а в учебнике сказано что-то вроде формы
mysql_connect($host, $user, $pass) or die("could not connect");
Как PHP знает, что функция провалилась, так что она запускает часть штампа? Наверное, я спрашиваю, как работает «или» его часть. Я не думаю, что видел это раньше.
Если первый оператор возвращает true
, тогда весь оператор должен быть true
поэтому вторая часть никогда не выполняется.
Например:
$x = 5; true or $x++; echo $x; // 5 false or $x++; echo $x; // 6
Поэтому, если ваш запрос не увенчался успехом, он будет оценивать оператор die()
и заканчивать сценарий.
PHP or
работает как C's ||
(который, кстати, также поддерживается PHP – or
просто выглядит лучше и имеет разные приоритеты оператора – см. эту страницу ).
Он известен как оператор короткого замыкания, потому что он пропустит любые оценки, как только у него будет достаточно информации, чтобы определить окончательное значение.
В вашем примере, если mysql_connect()
возвращает TRUE, тогда PHP уже знает, что весь оператор будет оценивать TRUE независимо от того, что die()
evalutes, и, следовательно, die()
не оценивается.
Если mysql_connect()
возвращает FALSE, PHP не знает, будет ли весь оператор оцениваться в TRUE или FALSE, чтобы он продолжался, и пытается выполнить evalute die()
– завершение сценария в этом процессе.
Это просто хороший трюк, который использует способ or
работает.
Он работает, как описано другими.
В PHP не используйте «die», так как он НЕ создает исключение (как в Perl). Вместо этого выкиньте исключение должным образом обычным способом.
die не может быть пойман на PHP и не записывается в журнал – вместо этого он печально печатает сообщение и сразу же покидает скрипт, никому не рассказывая ничего или предоставляя вам возможность записывать событие, повторять попытку и т. д.
$con=mysql_connect($host, $user, $pass) if(!$con) { die("could not connect"); } else { echo "Connected"; }