2016-07-10 224 views
0

這裏是我的功能:爲什麼我的函數返回意外結果?

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 

爲什麼?我所有的條件都是關於該功能中的數字,而不是字母。那麼它是如何工作的?

回答

4

因爲PHP確實是type juggling。它會將字符串「N」轉換爲一個整數,以便它可以執行if/else語句中的比較。 「N」變成零,與您的第一次比較相符。

類型雜耍是PHP的一個非常重要的方面,因爲不完全理解它會導致難以檢測到錯誤和意外的結果。

如果您的目標是防止非數字值被轉換,您應該使用諸如is_numeric(),is_integer()filter_var()等函數檢查數據類型。

+0

我明白了。 thx .. +1 – Shafizadeh

3

當您將N轉換爲數字進行比較$n < 10000時,$n變爲0,這導致第一個條件成立。 (這是返回$n,在這種情況下,是N。)

+0

明白了.. thx .. +1 – Shafizadeh

相關問題