我正在检查一些代码,并且想知道此表达式是否可能为false
:
!isset($_POST['foo']) || $_POST['foo']
上下文:
$bar = (!isset($_POST['foo']) || $_POST['foo']) ? 1 : 0;
答案 0 :(得分:2)
根据下面的快速测试,确实有可能
$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是正确的isset($ _ POST)将始终返回true,因为由于它是全局变量而总是被设置,因此应使用empty()
或其他方法
答案 1 :(得分:0)
您可能会想到以下情况:
$ bar =(true || null)? 1:0 => 1
$ bar =(false || true)? 1:0 => 1
$ bar =(false || false)? 1:0 => 0
$ bar =(true || false)? 1:0 => 1
我认为您应该阅读In php, is 0 treated as empty?
答案 2 :(得分:0)
问题陈述:
!isset($_POST['foo']) || $_POST['foo']
带有伪代码的伪代码:
NOT isset($_POST['foo']) OR $_POST['foo']
没有比OR运算符(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
因此,如果变量不存在且不为null,则isset仅计算为false。
自动转换为布尔值:
在布尔条件下,PHP中的普通变量在以下条件下的值为false
:
- 布尔值FALSE本身
- 整数0(零)
- 浮点数0.0(零)
- 空字符串和字符串“ 0”
- 具有零个元素的数组
- 特殊类型NULL(包括未设置的变量)
- 从空标签创建的SimpleXML对象
请参阅:http://php.net/manual/en/language.types.boolean.php。如您所见,在很多情况下这是不一样的。
您的代码用词表示的含义:如果变量是0,0.0,“”,“ 0”,[]或空XML对象之一,则返回1。