将0传递给默认值的函数

时间:2012-03-05 15:45:57

标签: php function default-value

我目前正在测试一个简单的PHP函数。

如果在没有传递任何参数的情况下调用函数,或者在传递参数时设置新值,我想返回字段的当前值。 奇怪的是:如果我传递0(var_dump显示正确的值int(1)0),函数进入if分支就像我调用函数没有任何值,我只是不明白为什么。

功能:

public function u_strasse($u_strasse = 'asdjfklhqwef'){
  if($u_strasse == 'asdjfklhqwef'){
    return $this->u_strasse;
  } else {
    // set new value here
  }
}

u_strasse()u_strasse(0)让我进入if分支。

4 个答案:

答案 0 :(得分:4)

您应该使用null作为默认值:

public function u_strasse($u_strasse = null)
{
    if ($u_strasse === null) { $u_strasse = 'asdjfklhqwef'; }

    // rest of function
}

答案 1 :(得分:1)

使用===代替==:

public function u_strasse($u_strasse = 'asdjfklhqwef'){
  if($u_strasse === 'asdjfklhqwef'){
    return $this->u_strasse;
  } else {
    // set new value here
  }
}

如果== php尝试将'asdjfklhqwef'转换为数字(因为您将$ u_strasse作为数字传递)和(int)'asdjfklhqwef'等于0.要避免此行为,您需要严格比较(=== )

详细了解==和=== here

中的差异

答案 2 :(得分:1)

比较不同类型的变量(特别是字符串和数字)时,两个值都将转换为数字。因此,'asdjfklhqwef'转换为0(数字),比较为真。

http://www.php.net/manual/en/language.operators.comparison.php

答案 3 :(得分:0)

传递'0'而不是0.前者将是一个字符串。 你可以像这样投射:

$myvar = 0;

u_strasse((string)$myvar);