以下两个ifs产生了不同的结果(第一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'
}
Run Code Online (Sandbox Code Playgroud)
dec*_*eze 13
&&具有更高的优先级比=,因此,第一个表达式被评估为:
isset($_REQUEST['test']) && $t = (trim($_REQUEST['test']) && !empty($t))
Run Code Online (Sandbox Code Playgroud)
因为!empty($t)在分配任何内容之前进行评估$t,所以表达式是false.您可以通过显式设置括号或使用不那么笨拙的方式来编写它来解决此问题:
if (isset($_REQUEST['test']) && trim($_REQUEST['test'])) {
echo 'hi';
}
Run Code Online (Sandbox Code Playgroud)
trim($_REQUEST['test'])将评估true或false仅仅自己评估,没有empty必要.如果您以后确实需要trimmed值,可以像这样保存:
if (isset($_REQUEST['test']) && ($t = trim($_REQUEST['test']))) {
echo 'hi';
}
Run Code Online (Sandbox Code Playgroud)