如果有条件,则在内部指定php变量

如果有条件,则在内部指定php变量,php,if-statement,Php,If Statement,以下两个ifs产生了不同的结果(第一个ifechos hi,第二个没有),为什么?为什么$t上的变量赋值不起作用?这是由于$t在if条件中的本地作用域造成的吗 if(isset($_REQUEST["test"]) && $t=trim($_REQUEST["test"]) && !empty($t)){ echo 'hi' } if(isset($_REQUEST["test"]) && $t=trim($_REQUEST["test"]

以下两个
if
s产生了不同的结果(第一个
if
echos hi,第二个没有),为什么?为什么
$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'
}
&&
的值大于
=
,因此第一个表达式的计算结果为:

isset($_REQUEST['test']) && $t = (trim($_REQUEST['test']) && !empty($t))
自从<代码>!空($t)在将任何内容分配给
$t
之前进行计算,表达式为
false
。您可以通过显式设置括号或使用不太麻烦的方式编写来解决此问题:

if (isset($_REQUEST['test']) && trim($_REQUEST['test'])) {
    echo 'hi';
}
trim($\u REQUEST['test'])
将自行计算为
true
false
,无需
empty
。如果以后确实需要
trim
med值,可以这样保存:

if (isset($_REQUEST['test']) && ($t = trim($_REQUEST['test']))) {
    echo 'hi';
}

如果您在代码中做了如下小修改:

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/>';
}
if(设置($请求[“测试])&&($t=trim($请求[“测试]))&&!空($t)){
回声“1:hi
”; } 如果(isset($请求[“测试”])和&$t=trim($请求[“测试”])){ 如果(!空($t)) 回声“2:hi
”; }
然后将同时打印
1:hi
2:hi
。第一个$t赋值的括号中有差异。