0
    function foo($a)
    { 
      if($a) {return "a";}
      else if($a==2) {return "b";}
      else {return "c";}
     }

     -----------------------------------------

     function foo2($a)
     {
       if($a==1){return "a";}
       if($a==2){return "b";}
       if($a==3){return "c";}

     }

1,2または3から任意の数値を渡したとき? 1を返します。関数foo2に値を渡すと、渡された値として値が返されます。

しかし、なぜ違いが来るのですか?

4

4 に答える 4

4

のようなことをするときif ($a)は、PHP が弱い型付き言語であることを考慮してください。で評価されるものを理解するには、ブール値の変換規則をif ($a)参照してください。

マニュアルからの引用:

ブール値に変換する場合、次の値が考慮されFALSEます。

  • ブール値FALSEそのもの
  • 整数0(ゼロ)
  • フロート0.0(ゼロ)
  • 空文字列と文字列"0"
  • 要素がゼロの配列
  • メンバー変数がゼロのオブジェクト (PHP 4 のみ)
  • 特別な型NULL(未設定の変数を含む)
  • SimpleXML空のタグから作成されたオブジェクト

(驚くべき!)TRUEを含む他のすべてが考慮されます。-1

一方、 を実行するとif ($somevar == 1)、 then$somevar == 1は既に でbooleanあり、変換規則は適用されません。

于 2013-02-16T18:55:04.720 に答える
1

if($a) ゼロ以外の値はですtrue

if($a==1) 値は1つだけtrueです。

于 2013-02-16T18:57:47.073 に答える
0

の場合、 は返され$aません。それ違いです。true1

于 2013-02-16T18:55:36.427 に答える
-1

if($a)「a が true の場合、これを行う」と同じ意味です。

PHP (および他のほとんどの言語) では、値 0 は false を意味し、その他の値はすべて「true」を意味します。

于 2013-02-16T18:55:08.370 に答える