Как работает слово or в php?

219
22 июля 2018, 12:40

Смотрю документацию php о функции exit. Натыкаюсь на такой пример:

$file = fopen($filename, 'r')
    or exit("Невозможно открыть файл ($filename)");

В самой документации на счёт or есть информация только как о логическом операторе. Я правильно понимаю, что этот or работает как конструкция try-catch? Если слева от or - false или функция, возвращающая false или ошибку, то выполняется код справа?

Answer 1

Как уже ответили, это действительно алиас ||1.
Но это не аналог try...catch, так как последний ловит выброшенные исключения, а || выбирает из операндов.

Конструкция вида $file = open(...) or die('Cannot open'); использует особенность вычисления оператора OR: если левый операнд равен true (или тому, что приводит к true в логическом контексте), то правый не вычисляется.
Поэтому либо файл открывается (функция вернёт true), либо вычисляется второй аргумент, в этом примере, останавливает скрипт с выводом ошибки.

Похожий вопрос на enSO: Logical Operators, || or OR?.

1 Приоритет токена || выше, чем or, спасибо @tutankhamun.

Answer 2

Это синоним || со всеми вытекающими в PHP. Try-catch ловить будет, если в исключении true-false, 0-1 и т.д.

READ ALSO
Вывод только активных постов

Вывод только активных постов

Как сделать вывод постов из таблицы events только тех кто имеет в столбце active параметр active

181
Как правильно отправить doc файл с помощью curl и php?

Как правильно отправить doc файл с помощью curl и php?

Работаю с api стороннего сервиса, обрабатываю форму, данные с которой отправлены аяксомФорма состоит из обычных полей и поле с файлом, при...

168
Сниппет(Modx) обрабатывает только первый GET запрос

Сниппет(Modx) обрабатывает только первый GET запрос

Существует проблема при фильтрации новостейСниппет обрабатывает только первый GET запрос, при повторном запросе данные остаются неизменными

183
Как скрыть блок при наличии сессии?

Как скрыть блок при наличии сессии?

Вот есть такой код, как его изменить так

184