短版:
使用ctype_digit($_REQUEST['age'])
龍版本:
在使用gettype
時發現的問題是:$_REQUEST
返回字符串。即使該字符串是一個整數語義上,如16
,它仍然是一個字符串類型,而不是一個整型變量。你得到來自兩個測試不同的結果,因爲他們測試不同的東西:
is_numeric
測試一個字符串是否包含根據PHP docs一個「可選的符號,任意數量的數字,可選的小數部分和可選的指數部分」 。在你的情況下,字符串只包含數字,所以測試返回True
。
is_int
測試變量的類型是否爲整數 - 它不會是這樣,因爲它是由$_REQUEST
返回的。
這就是爲什麼is_numeric
回報True
而is_int
回報False
:字符串僅包含數字(等「是數字」),但技術上仍然有一個字符串類型,而不是一個整數類型(因此「不是一個int 「)。當然,is_numeric
不足以用於整數測試,因爲如果字符串有小數或使用科學記數法(即數字而不是整數),它將返回True
。
要測試$_REQUEST
是否爲整數,無論技術類型如何,都可以測試字符串中的所有字符是否都是數字(因此整個字符串是整數)。爲此,您可以使用ctype_digit:
ctype_digit($_REQUEST['age'])
這將返回True
爲16
而不是16.5
或16e0
- 淘汰從數字非整數的整數。
太棒了!不知道這一點。 – finishingmove 2013-04-16 16:51:14