提问人:tirenweb 提问时间:1/9/2019 最后编辑:Blackbamtirenweb 更新时间:1/10/2019 访问量:98
这种说法会不会是假的?
Could this expression ever be false?
问:
我正在检查一些代码,我想知道这个表达式是否可以是: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 is correctt isset($_POST) 将始终返回 true,因为它始终是由于是全局变量而设置的,应该改用或其他方法empty()
评论
您可以想到以下情况:
- $_POST['foo'] 不存在
$bar = (true || null) ?1 : 0 => 1
- $_POST['foo'] 存在,值不是 0、false 或空字符串
$bar = (false || true) ?1 : 0 => 1
- $_POST['foo'] 存在且值为 0,false,空字符串
$bar = (false || false) ?1 : 0 => 0
- $_POST['foo'] 存在且值为 null
$bar = (true || false) ?1 : 0 => 1
我认为你应该在 php 中阅读这篇文章,0 是否被视为空?
问题陈述:
!isset($_POST['foo']) || $_POST['foo']
带有 wods 的伪代码:
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。
评论
$_POST['foo']
false
isset()
不检查某些内容是否为空。这些主要用于收音机、复选框、选择输入。您到底想检查什么?$_POST['foo']
<textarea>
<input type="text" ... />
$bar
0
<textarea>
1