Я проверяю некоторый код, и мне интересно, может ли это выражение когда-либо быть false
:
!isset($_POST['foo']) || $_POST['foo']
Контекст:
$bar = (!isset($_POST['foo']) || $_POST['foo']) ? 1 : 0;
Согласно приведенному ниже быстрому тесту, это действительно возможно
$trueVar = true; // Or 1
$falseVar = false; // Or 0
$nullVar = null;
$emptyVar = "";
$result1 = (!isset($trueVar) || $trueVar) ? 1 : 0;
$result2 = (!isset($falseVar) || $falseVar) ? 1 : 0;
$result3 = (!isset($nullVar) || $nullVar) ? 1 : 0;
$result4 = (!isset($emptyVar) || $emptyVar) ? 1 : 0;
Output:
result1 = 1
result2 = 0
result3 = 1
result4 = 0
Примечание: почему бы вам просто не сделать $bar = isset($_POST['foo'])
и узнать, пусто это или нет?
Редактировать: Funk Forty Niner — это правильный набор ($ _ POST) всегда будет возвращать true, потому что он всегда установлен из-за того, что является глобальной переменной, empty()
следует использовать вместо этого или другой подход
Вы можете подумать о следующих случаях:
$ bar = (true || null)? 1: 0 => 1
$ bar = (false || true)? 1: 0 => 1
$ bar = (false || false)? 1: 0 => 0
$ bar = (true || false)? 1: 0 => 1
Я думаю, что вы должны прочитать это В php 0 считается пустым?
Постановка задачи:
!isset($_POST['foo']) || $_POST['foo']
Псевдокод с водками:
NOT isset($_POST['foo']) OR $_POST['foo']
Не имеет более высокую привязку, чем оператор ИЛИ (http://php.net/manual/de/language.operators.logical.php).
Что вы действительно спрашиваете: Есть ли isset($_POST['foo'])
всегда оценивать с тем же результатом, что и $_POST['foo']
?
Определение функции isset:
isset — определяет, установлена ли переменная и не равна ли NULL
http://php.net/manual/en/function.isset.php
Следовательно, isset оценивается как false, только если переменная не существует и не равна нулю.
Автоматическое приведение к логическому:
Простая переменная в PHP в логическом условии оценивается как false
при следующих условиях:
- само логическое ЛОЖЬ
- целое число 0 (ноль)
- Поплавок 0.0 (ноль)
- пустая строка и строка «0»
- массив с нулевыми элементами
- специальный тип NULL (включая неустановленные переменные)
- SimpleXML объекты, созданные из пустых тегов
Увидеть: http://php.net/manual/en/language.types.boolean.php . Как видите, во многих случаях это не одно и то же.
Что ваш код означает словами: Если переменная имеет значение 0,0.0, «», «0», [] или пустой объект XML, верните 1.