1

我可以在 PHP 中做到这一点吗?

if ($Var = $this->test1() == true) {
    var_dump($Var);
}

public function test1() {
    return true;
}

它与 true 相呼应,但我不确定这是否是检查此类返回值的正确方法。

4

4 回答 4

3

的,你可以,但要写:

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

这被过度简化了,但这些情况确实会发生。

于 2012-09-10T19:04:19.697 回答
2

你可以,但有两件事你应该注意:

当您执行以下操作时:

if ($Var = $this->test1() == true) {

运营商很困惑:

  • 你想做 $this->test1() == true 并存储结果 $var
  • 你想做 $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) {
于 2012-09-10T19:34:21.683 回答
1

== true部分是不必要的。你所拥有的是有效的语法,但有些人觉得它令人困惑。你总是可以这样做:

$Var = $this->test1();
if ($Var) { ...

只需与您的开发团队一起决定标准。

于 2012-09-10T19:04:59.927 回答
1

你也可以这样做:

if ($Var = $this->test1()) {
    var_dump($Var);
}

public function test1() {
    return true;
}
于 2012-09-10T19:13:46.323 回答