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

できますが、知っておくべきことが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に保存したいのか(つまり、varに3を作成したいのか)、または比較結果を$ this-> test1==5に入れたいのか理解できません。 Var(false)。

最後に$Varに残っているものは、 PHP 5.3認定では非常に良い質問かもしれませんが、有用なケースではありません。

間違いを避けるために、括弧を使用します:

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

あなたはタイプの世話をする必要があります

キャスタブルを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 に答える