【问题标题】:php variable assignment inside if conditional如果有条件的php变量赋值
【发布时间】:2011-07-24 22:34:38
【问题描述】:

以下两个ifs 产生了不同的结果(第一个if 回显你好,第二个没有),为什么?为什么$t 上的变量赋值不起作用?这是由于$tif 条件内的本地范围吗?

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'
}

【问题讨论】:

标签: php if-statement


【解决方案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 赋值的括号。

【讨论】:

    【解决方案2】:

    &amp;&amp;higher precedence= 多,因此第一个表达式的计算结果为:

    isset($_REQUEST['test']) && $t = (trim($_REQUEST['test']) && !empty($t))
    

    由于在将任何内容分配给$t 之前评估了!empty($t),因此表达式为false。你可以通过显式设置括号来解决这个问题,或者使用一种不太尴尬的方式来编写它:

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

    trim($_REQUEST['test']) 将单独评估为truefalse,不需要empty。如果你以后真的需要trimmed 值,你可以这样保存:

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

    【讨论】:

      猜你喜欢
      • 2012-08-23
      • 1970-01-01
      • 2017-02-27
      • 2015-01-26
      • 1970-01-01
      • 2013-12-05
      • 1970-01-01
      • 2013-07-14
      • 1970-01-01
      相关资源
      最近更新 更多