PHP: непонятное поведение оператора "or"

Я всегда думал, что операторы "||" и «or» в пхп работают одинакого.
Судя по документации, они действительно должны работать одинакового, за исключением приоритетов.
Однако
$x = 0 || 1
и
$x = 0 or 1
в действительности работают по разному.

Код:
<?php
function foo(){
print "foo";
return 0;
}

function bar(){
print "bar";
return 1;
}

$x = foo() or bar();
var_dump($x);


Данный код выводит результат:
foobarint(0)

Кто-нибудь может объяснить данное поведение?
  • Вопрос задан
  • 2441 просмотр
Пригласить эксперта
Ответы на вопрос 6
barmaley_exe
@barmaley_exe
Да, они работают одинаково, за исключением приоритетов. У оператора or он настолько низкий, что даже ниже, чем у оператора присваивания.
Ответ написан
Hoorsh
@Hoorsh
Digital-специалист, веб-разработчик
Автор, никогда не встречали чтоли такую конструкцию, которая на каждом шагу во всяких FAQ'ах валяется:
$handle = mysql_connect() or die(mysql_error());
Я думаю понятно, что в данном случае в $handle не результат логического OR требуется засунуть, а отработать ошибку подключения.
Ответ написан
Комментировать
Fastto
@Fastto
Недавно на хабре рассматривался вопрос — оператор запятая. Вот там, кроме всего прочего, изложен ответ на интересующий Вас вопрос.
Ответ написан
@DileSoft
Конечно. В случае OR второй операнд не вычисляется, если первый равен TRUE. Так же и с AND.
Ответ написан
homm
@homm
$x = (foo() or bar());
Ответ написан
Комментировать
Прочитайте и распишитесь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы