以下两个if
产生了不同的结果(第一个if
回声,第二个没有),为什么?为什么$t
上的变量赋值不起作用?这是由$t
条件内的if
局部范围引起的吗?
if(isset($_REQUEST["test"]) && $t=trim($_REQUEST["test"]) && !empty($t)){
echo 'hi'
}
if(isset($_REQUEST["test"]) && $t=trim($_REQUEST["test"])){
if(!empty($t))echo 'hi'
}
答案 0 :(得分:13)
&&
的{{3}}大于=
,因此第一个表达式评估为:
isset($_REQUEST['test']) && $t = (trim($_REQUEST['test']) && !empty($t))
由于在将任何内容分配给!empty($t)
之前评估$t
,因此表达式为false
。您可以通过显式设置括号或使用不那么笨拙的方式来编写它来解决这个问题:
if (isset($_REQUEST['test']) && trim($_REQUEST['test'])) {
echo 'hi';
}
trim($_REQUEST['test'])
将自行评估为true
或false
,不需要empty
。如果您以后确实需要trim
med值,可以这样保存:
if (isset($_REQUEST['test']) && ($t = trim($_REQUEST['test']))) {
echo 'hi';
}
答案 1 :(得分:1)
如果您在代码中进行了这样的小修改:
if(isset($_REQUEST["test"]) && ($t=trim($_REQUEST["test"])) && !empty($t)){
echo '1: hi<br/>';
}
if(isset($_REQUEST["test"]) && $t=trim($_REQUEST["test"])){
if(!empty($t))
echo '2: hi<br/>';
}
然后将打印1: hi
和2: hi
。差异是围绕第一个$ t分配的括号。