如果有条件的话,php变量赋值

时间:2011-03-29 02:13:04

标签: php if-statement

以下两个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'
}

2 个答案:

答案 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'])将自行评估为truefalse,不需要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: hi2: hi。差异是围绕第一个$ t分配的括号。