Как это оценивается как правда?

1

Я читаю PHP Cookbook, в разделе "Формы" есть следующее:

Проблема: вы хотите удостовериться, что значение было предоставлено для элемента формы. Например, вы хотите убедиться, что текстовое поле не осталось пустым.

Затем автор уточняет:

// Making sure $_POST['flavor'] exists before checking its length
    if (! (filter_has_var(INPUT_POST, 'flavor') &&
        (strlen(filter_input(INPUT_POST, 'flavor')) > 0))) {
        print 'You must enter your favorite ice cream flavor.';
    }

Я не понимаю, как это выражение "и" оценивается как true.
Не будет !(filter_has_var(INPUT_POST,'flavor') всегда будет ложным?

  • 4
    ! Оператор применяется ко всему (... && ...) выражению. Который фактически отрицает это: «если он не существует или является пустой строкой»
  • 1
    если вы правильно формируете код, вы не получите такого рода ошибки
Теги:
if-statement

2 ответа

0
Лучший ответ

filter_has_var(INPUT_POST, 'flavor') будет убедиться, что форма отправлен flavor переменного поста

strlen(filter_input(INPUT_POST, 'flavor')) > 0 будет убедиться, что flavor переменной пост является иным, чем "" (пустая строка)

! оператор применяется ко всему выражению, используя () и будет удостовериться, что оба этих условия ложны, чтобы они были истинными.

1

Ключ - это порядок скобок. Проверьте значки карата, которые я поставил под соответствующими скобками:

( !(filter_has_var(INPUT_POST,'flavor') && (strlen(filter_input(INPUT_POST,'flavor'))>0)) )
   ^                                                                                    ^

Поэтому он фактически проверяет: "if not both are true".

Вы можете переписать это так: "if X is not true or Y is not true":

( !filter_has_var(INPUT_POST,'flavor') || !strlen(filter_input(INPUT_POST,'flavor')) > 0 )

По-моему, эта последняя версия более читаема, и поэтому я бы предпочел ее.

  • 0
    Вау спасибо, вот и все. Я был обманут книгой! И да, пытаясь понять это, я переписал это с 'или', и это было действительно намного более читабельным.
  • 0
    @Marconato - если вам нравится ответ, вы можете принять его, нажав на галочку слева .. :-)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню