#php
#php
Вопрос:
Я не могу понять, почему два условия, содержащие одинаковые значения, не возвращают один и тот же результат дважды.
Посмотрите на содержимое переменной :
$quantity = 1;
var_dump(!$cart = true);
var_dump(!$product = false);
var_dump($quantity <= 0);
--------
Output : bool(false) bool(true) bool(false)
Основываясь на этих логических значениях, я ожидаю, что вернется следующее условие TRUE
:
$quantity = 1;
var_dump(!$cart = true || !$product = false || $quantity <= 0);
---------
Output : bool(false)
Почему ? Я ожидал, что это будет TRUE
И почему следующее точно такое же условие выводит то, что я ожидал : TRUE
var_dump(false || true || false);
---------
Output : bool(true)
Редактировать
Я знаю, что =
это для назначения. Но делать это :
if(!$var = null){
// $var is not empty
}
Это способ присвоить значение и проверить, является ли это значение null|false|empty|array empty...
одновременно.
Комментарии:
1.
=
присваивается, используется==
или===
для проверки равенства.2. Я это знаю… Но если значению присваивается значение null, результат этого выражения возвращает false .
3. У присваивания другой приоритет оператора, чем у сравнения, т. Е. Ниже, чем у
||
оператора.4. Нет, в этом фрагменте
$var
по-прежнему пусто, вы можете проверить это сvar_dump
помощью . И вы бы ввели условие из-за приведения ,null
это значение false-y , и вы его отрицаете. Еслиnull
бы была переменная с непустым значением, она не вошла бы в условие, поскольку она оценивалась быif (false)
как .
Ответ №1:
Речь идет о приоритете оператора и ассоциативности.
var_dump(!$cart = true || !$product = false || $quantity <= 0);
совпадает с
var_dump(!$cart = (true || !$product = false || $quantity <= 0));
Результат (true || !$product = false || $quantity <= 0)
true . !true
есть false
.
Комментарии:
1. Хорошо, теперь я вижу… Это моя очень глупая ошибка. Итак, я должен это сделать
var_dump((!$cart = true) || (!$product = null) || ($quantity <= 0));