2015-08-07 5 views
0

У меня есть условие if, и по какой-то причине даже с пустой меткой времени (пустая строка) условие my else все еще выполняется.Порядок операций с круглыми скобками и ||

if (($limit_by == 0 && $latest_timestamp < $historical_timestamp) || 
    empty($latest_timestamp)) { 
    //stuff here 
} 
else { 
    //other stuff 
    $year = date("Y", $latest_timestamp); 
} 

Так что если $latest_timestamp пуст, я до сих пор иногда имея еще условие триггера (который является причиной 1969 даты, потому что $ latest_timestamp не установлен). Я также попробовал !isset() для проверки $ last_timestamp и посмотрел, поможет ли это. И нет.

Есть ли какой-то порядок операций, который я здесь отсутствует, что заставило бы другие два условия переопределить пустую проверку? Насколько мне известно, они должны только увеличивать диапазон предметов, которые вызывают условное.

+2

Ваше логическое выражение 'if' выглядит как' false'. Никто не может вам сказать, почему, если вы не будете выгружать значения этих переменных выражения –

+0

Невозможно воспроизвести. https://www.evernote.com/l/AAO6Tuwa_hdPT7PqPPeXUE14bCP4k-d4TJk – Quentin

+0

Одно из этих двух условий: '$ limit_by == 0' или' $ last_timestamp <$ history_timestamp' условия не должны быть истинными ... – War10ck

ответ

4

Есть ли какой-то порядок операций, который я здесь отсутствует, что приведет к тому, что другие два условия будут отменять пустую проверку?

No.

Но вы должны проверить $latest_timestamp установлен. В противном случае условие $latest_timestamp < $historical_timestamp всегда будет верно, как он преобразуется в 0.

Я хотел бы предложить добавить isset($latest_timestamp) к вашему первому условию, или еще лучше, воспользовавшись short circuit evaluation, перемещая второе условие на фронт.

if (empty($latest_timestamp) 
    || ($limit_by == 0 && $latest_timestamp < $historical_timestamp)) 
+0

Переключение пустой проверки на первое условие заставило ее работать. В этом есть смысл. –

+0

Да, добавление 'isset()' в первое условие или замена порядка делает то же самое.Однако, не забудьте прочитать ссылку на оценку короткого замыкания, чтобы понять, почему. –

+0

Я думаю, что вам действительно нужна только одна скобка перед оператором 'empty' – War10ck

0

Попробуйте проверить с

$latest_timestamp == '0000-00-00 00:00:00' 

вместо проверки пустой ($ latest_timestamp). Потому что значение пустой даты по умолчанию: «0000-00-00 00:00:00»

1

Советую сначала проверить пустоту $latest_timestamp, и только после этого - проверьте, меньше ли она других временных меток. `Потому что пустые значения по сравнению с другой меткой времени будут преобразованы в 0, я полагаю, и ваше первое условие можно оценить до true.

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