Страницы

Поиск по вопросам

вторник, 7 января 2020 г.

Операторы '||' и 'or'

#php


Доброго времени.
Сейчас работал с базой и озадачился вопросом:
$db_res = sqlite_open( $db_name ) || die ("Ошибка при открытии БД!" );
$query = sqlite_query($db_res, "SELECT * FROM $table") || die ('Ошибка в запросе!');

При использовании "|| die()" получаю ошибку 

Warning: sqlite_query() expects parameter 1 to be resource, string given in ... on
line ...
Ошибка в запросе!

Если изменить оператор "||" на "or" все работает правильно, почему?    


Ответы

Ответ 1



Дело в том, что оператор || имеет более высокий приоритет, чем оператор =, по этому $db_res будет присвоен результат выражения sqlite_open( $db_name ) || die ("Ошибка при открытии БД!" ), т.е. true. Оператор or наоборот имеет более низкий приоритет, чем =, следовательно сначала $db_res будет присвоен результат sqlite_open( $db_name ) и только потом будет применено логическое ИЛИ: $db_res || die ("Ошибка при открытии БД!" ) Т.е. если явно расставить приоритеты, то оба выражения будут выглядеть так: $db_res = ( sqlite_open( $db_name ) || die ("Ошибка при открытии БД!" ) ); ( $db_res = sqlite_open( $db_name ) ) or die ("Ошибка при открытии БД!" );

Ответ 2



А соглашения о программировании говорят об приоритете использования операторов OR и AND перед || и &&. Так что я советую использовать буквенный вариант.

Комментариев нет:

Отправить комментарий