我目前正在测试一个简单的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分支。
答案 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);