-4

他の条件に基づいて、1 つの変数を true に設定するにはどうすればよいですか。ここでは、代わりに

if ($vara && $varb && $varc)

私は以下のようなものです。問題は、私が何かを正しく理解していないということです。手伝ってくれませんか?

<?php

$onward = false;

$vara = 11;
$varb = 21;
$varc = 3;

if ($vara == 1)
{$onward = true;}else{$onward = false;}

if ($varb == 2)
{$onward = true;}else{$onward = false;}

if ($varc == 3)
{$onward = true;}else{$onward = false;}

if ($onward)
{
echo "Ok";
}else {echo "Not ok";}

?>
4

6 に答える 6

4

各条件は、前の条件の結果を無視します。$onward後続の各テストに以前の状態を含める必要があります。

if ($vara == 1)
{$onward = true;}else{$onward = false;}

if ($varb == 2 && $onward)
{$onward = true;}else{$onward = false;}

if ($varc == 3 && $onward)
{$onward = true;}else{$onward = false;}

このようにvarbして、前のテストの後も真であるvarc場合にのみテストされます。$onward

これは、コードの書き方として特に醜い方法です。3 つの大きな条件があり、 のように単純に 1 行に結合したくない場合は、次の$vara && $varb && $varcように記述する必要があります。

$onward = ($vara == 1)
$onward = $onward && ($varb == 2);
$onward = $onward && ($varb == 3);    

if ステートメントの場合、分岐で単に何かを true/false に返す/設定するときはいつでも、条件自体を返す/設定する必要があります。

つまり、これは次のとおりです。

if (condition) {
  return true;
} else {
  return false;
}

常に書かれるべきです:

return condition;
于 2012-08-16T16:09:10.113 に答える
3

私はあなたが探していると思います:

$onward = $vara == 1 || $varb == 2 || $varc ==3;

また

$onward = $vara == 1 && $varb == 2 && $varc == 3;

あなたの目標に応じて。


これとともに:

if ($varc == 3)
{$onward = true;}else{$onward = false;}

$onwardfalseが 3 でない場合は常に になります$varc

于 2012-08-16T16:09:42.930 に答える
2

私はあなたが意味すると確信しています

if (($vara == 1) && ($varb == 2) && ($varc == 3))
{$onward = true;}else{$onward = false;}

あるいは

$onward = (($vara == 1) && ($varb == 2) && ($varc == 3));
于 2012-08-16T16:10:23.967 に答える
1

これを行うより良い方法:

if ($vara == 1) {$onward = true;} else {$onward = false;}

これは:

$onward = ($vara == 1);
于 2012-08-16T16:09:08.350 に答える
0

毎回同じ変数を上書きしているので、最初の 2 つの条件は実際には無意味です。

同じ論理的効果を持つ最初のより簡潔なアプローチでこれを行う理由がわかりません。

if ($varc ==== 1 || $varc === 2 || $varc === 3)
    $onward = true;
else
    $onward = false;

または単に:

$onward = $varc === 1 || $varc === 2 || $varc === 3;

これまでのことにも注意してください== 1。比較では、データは true/falsy の等価物に変換されるため、true の値はすべて比較で true に解決されます== 1。何かが文字どおり 1 であることをテストするには、 を使用します===。(これは、型ではなく値を明示的にテストしたいことがわかっている場合を除き、一般的には適切なルールです。)

于 2012-08-16T16:11:00.387 に答える