为什么我的函数返回意外的结果?

时间:2016-07-10 20:31:28

标签: php function

这是我的功能:

function getShortNum($n) {
    if     ( $n < 10000 )     return $n;
    elseif ( $n < 100000 )    return round( $n / 1000, 1) . "k";
    elseif ( $n < 1000000 )   return floor( $n / 1000 )   . "k";
    elseif ( $n < 1000000000) return floor( $n / 1000000) . "M";
    else                      return "Wow!!!";      
}

如您所见,我的函数将长数字转换为短数字。以下是一些例子:

1        => 1
10       => 10
100      => 100
1000     => 1000
1001     => 1001
10000    => 10k
10100    => 10.1k
100000   => 100k
101000   => 101k
101111   => 101k
1000000  => 1M
1111111  => 1M
10111111 => 10M
11000000 => 11M

好的,一切都很好。就在我将一封信传递给该函数时,它返回完全相同的东西。例如:

echo getShortNum("N"); // output: N

为什么呢?我的所有条件都与该函数中的数字有关,而不是字母。它是如何工作的?

2 个答案:

答案 0 :(得分:4)

因为PHP确实type juggling。它将转换字符串&#34; N&#34;到一个整数,所以它可以在你的if / else语句中进行比较。 &#34; N&#34;变为零,与您的第一次比较匹配。

类型杂耍是PHP的一个非常重要的方面,因为没有完全理解它可能导致难以检测到错误和意外结果。

如果您的目标是阻止转换非数字值,则应使用is_numeric()is_integer()filter_var()等功能检查数据类型。

答案 1 :(得分:3)

N转换为要比较$n < 10000的数字时,$n变为0,这会导致第一个条件为真。 (这只是返回$n,在这种情况下,是N。)