2013-02-16 149 views
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";} 

    } 

當我通過值任何數字frim 1,2或3?它會返回1.當我傳遞函數foo2中的值時,它將返回值作爲值傳遞。

但爲什麼會出現差異?

回答

4

當您執行類似if ($a)的操作時,請考慮PHP是weak typed language。要了解if ($a)中評估的內容,請參閱conversion rules for booleans

從手動引用:

當轉換爲布爾型,下面的值被認爲是FALSE

  • 布爾FALSE本身
  • 整數0(零)
  • 的float 0.0(零)
  • 空字符串,並且字符串"0"
  • 一個零個元素
  • 零個成員變量的對象陣列(PHP 4只)
  • 特殊類型NULL(包括尚未設定的變量)從創建
  • SimpleXML對象空標籤

所有的人都認爲TRUE,包括-1(顯着的!)。

另一方面,當您做if ($somevar == 1),那麼$somevar == 1已經是boolean,並且轉換規則不適用。

+1

比我的嘗試寫得好得多。很好地說。 – 2013-02-16 18:55:45

+1

讓我的脊椎發抖。尤其是最後一個。 – user2398029 2013-02-16 19:05:17

+0

我非常感謝您的簡短介紹@PhilipWhitehouse,@ louism – 2013-02-16 19:47:41

-1

if($a)意思是一樣的:「如果是真的,這樣做」

在PHP(和大多數其他語言),0值意味着假,任何其他值是「真」

+0

你是對的,但它不能回答這個問題。 – 2013-02-16 18:58:55

0

如果$atrue,它將不是返回1是差異。

+0

謝謝@desbest – 2013-02-16 19:48:38

1

if($a)任何非零值是true

if($a==1)只有 1值是true

+0

謝謝@面膜 – 2013-02-16 19:49:05

相關問題