2013-02-16 319 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

相关问题