2012-04-22 2 views
5

Итак, я только что понял какое-то странное поведение с PHP и хотел бы знать, почему это происходит. Так работает этот код:PHP-тернарный оператор с использованием 'и'

var_dump(true and false ? 'one' : 'two'); 

Выходы

boolean true 

вместо «два», как и следовало ожидать ... Проблема, как представляется, используя «и».

Продолжительность:

var_dump(true && false ? 'one' : 'two'); 

выходы

string 'two' (length=3) 

так же, как ожидалось. Почему использование 'и' вместо '& &' вызывает это странное поведение? Разве они не должны быть одинаковыми?

+0

Я хотел бы узнать ответ на этот вопрос. Мое предположение - это порядок. В первом из них используется ложное значение для тернарного оператора, который выходит на true и «two», который оценивается как true ... – DanRedux

+0

Похоже, я был прав. : P – DanRedux

ответ

5

Это потому, что ?: имеет более высокий precedence, чем and, но ниже &&.

+0

Вау, это просто глупо. Есть ли логическая причина 'и' и' && 'не имеют равных возможностей? – dtbarne

+0

Теперь просто не имеет смысла, почему они это сделали ... теперь я понимаю, что используя $ one и $ two || $ 3, например, не совпадает с $ one && $ two || $ Три. Спасибо за это. – Zaptree

+1

@dtbarne @Zaptree: На самом деле существует довольно простая причина наличия двух разных логических и логических операторов с разными приоритетами. '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' очевидно, плохой код), т. е. они более чередуются или конкатенируют логику. – NikiC

3

Это потому, что and имеют более низкий приоритет, чем && и ?:.

+0

спасибо за ответ, вы на 1 секунду позже Раду: P – Zaptree

Смежные вопросы