我可以在 PHP 中做到这一点吗?
if ($Var = $this->test1() == true) {
var_dump($Var);
}
public function test1() {
return true;
}
它与 true 相呼应,但我不确定这是否是检查此类返回值的正确方法。
我可以在 PHP 中做到这一点吗?
if ($Var = $this->test1() == true) {
var_dump($Var);
}
public function test1() {
return true;
}
它与 true 相呼应,但我不确定这是否是检查此类返回值的正确方法。
是的,你可以,但要写:
if (($var = $this->test1()) === true) {
var_dump($var);
}
为了安全起见并提醒读者发生了一些事情。
我不建议你这样做,但在某些情况下这是可以接受的;例如需要延迟执行的复杂 if-else 树。
if (($result = slow_process()) !== false) {
return $result;
} else if (($result = slow_process1()) !== false) {
return $result;
} else if (($result = slow_process2()) !== false) {
return $result;
} else if (($result = slow_process3()) !== false) {
return $result;
}
这被过度简化了,但这些情况确实会发生。
你可以,但有两件事你应该注意:
当您执行以下操作时:
if ($Var = $this->test1() == true) {
运营商很困惑:
在您的情况下, $this->test1() 返回 true 所以没关系。但是,如果我们稍微更改您的代码:
if ($Var = $this->test1() == 5) {
var_dump($Var);
}
public function test1() {
return 3;
}
阅读您的代码的人将不明白您是否要将 $this->test1() 存储在 $Var 中(因此,将 3 放入 var)或者您是否要将比较结果 $this->test1 == 5 放入 $变量(假)。
最后保留在 $Var 中的内容在PHP 5.3 认证中可能是一个非常好的问题,但在有用的情况下却不是。
为避免错误,请使用括号:
if (($var = $this->test1()) == true) {
您应该注意类型:
我给你一个例子,说明什么可以将 castable 返回 true :
function test1() { return true; }
function test2() { return 3; }
function test3() { return 3.42; }
function test4() { return "x"; }
function test5() { return array('x'); } // array() == true returns false
function test6() { return new stdClass(); }
echo test1() == true;
echo test2() == true;
echo test3() == true;
echo test4() == true;
echo test5() == true;
echo test6() == true;
// outputs 111111 (1 = true)
为避免错误,您应该使用=== 运算符。您的最后一段代码变为:
if (($var = $this->test1()) === true) {
该== true
部分是不必要的。你所拥有的是有效的语法,但有些人觉得它令人困惑。你总是可以这样做:
$Var = $this->test1();
if ($Var) { ...
只需与您的开发团队一起决定标准。
你也可以这样做:
if ($Var = $this->test1()) {
var_dump($Var);
}
public function test1() {
return true;
}