| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Порядок выполнения оператора if |
| Автор: maxipub 25.8.2017, 12:21 | ||||
| Добрый день! Я знаю про приоритеты операторов http://php.net/manual/ru/language.operators.precedence.php Вопрос немного в другом. Приоритеты это как бы группировка. Как писали в комментарии http://php.net/manual/ru/language.operators.precedence.php :
А мой вопрос о том, проверка выполняется слева направо по порядку, т.е. в первом случае сначала "(a and b)", если false то только потом "or c", если true - то "or c" не проверяется, условие уже выполнено. А во втором случае сначала "a", если true, тогда "and (b or c)", если false - то "and (b or c)" не проверяется, т.к. условие уже не выполнимо. Такая логика или как? Я делал тесты на PHP5.3 - по тестам все вроде так. Слева направо, если условие уже выполнено или уже не выполнимо - дальше ничего не проверяется. Но на деле всегда так или есть нюансы? Так же интересует поведение в PHP7.1 Для примера, можно ли делать так:
? Меня волнует чтоб file_exist не начал проверяться до $file_name = $db->result(), иначе по очевидным причинам оператор if будет возвращать false. Или лучше разбивать на два оператора if? Лишние строки... |
| Автор: _zorn_ 25.8.2017, 17:46 |
Взаимоисключающие. Чтобы не "волноваться" заключайте в скобки. А так судя по вашей же ссылке $file_name будет равен boolean выражению "$db->result() && file_exist(ROOT_DIR.$file_name)" Чтобы произошло то что вам нужно - "if ( ( $file_name = $db->result() ) && file_exist(ROOT_DIR.$file_name))" |
| Автор: maxipub 28.8.2017, 17:40 |
| _zorn_, спасибо, но вопрос не о том. |
| Автор: _zorn_ 1.9.2017, 18:51 |
2 + 2 * 2 Давайте с простого |