Почему состояние SSI!= ||!= не работает?
Я не могу работать с этим условным выражением
<!--#if expr="$DOCUMENT_NAME!=index.html || $DOCUMENT_NAME!=links.html" -->
пока этот без !
до =
работает отлично
<!--#if expr="$DOCUMENT_NAME=index.html || $DOCUMENT_NAME=links.html" -->
В чем проблема? Я не получаю ошибки просто !=
не работает, хотя ||
с другим условием, но работает для одного условия.
1 ответ
Это потому что =
а также !=
вряд ли один и тот же оператор. Обратите внимание, что по закону Де Моргана (который я также объяснил в этом старом посте),
a != b || c != d
эквивалентно
a = b && c = d
что никогда не верно для x = a && x = b
где a != b
,
Изменение бинарного оператора также требует изменения условий, чтобы быть эквивалентными.
Таким образом, по приведенной выше логике,
$DOCUMENT_NAME!=index.html || $DOCUMENT_NAME!=links.html
эквивалентно
$DOCUMENT_NAME=index.html && $DOCUMENT_NAME=links.html
который не может быть истинным, так как $DOCUMENT_NAME может быть "index.html" или "links.html", но не обоими.
Тем не менее, второй фрагмент,
$DOCUMENT_NAME=index.html || $DOCUMENT_NAME=links.html
"работает", потому что нет вышеупомянутой логической ошибки. Это будет верно, если $DOCUMENT_NAME имеет значение "index.html" или "links.html".
Некоторые языки / значения будут нарушать вышеуказанную эквивалентность... но это другая тема.