Saya sedang menulis kod PHP untuk mengesahkan beberapa data yang dimasukkan oleh pengguna, salah satunya ialah integer, yang kembali benar apabila saya menggunakan $_REQUEST["age"]
来获取它,当我用gettype($_REQUEST["age"]) == "integer"
和is_int($_REQUEST["age"])
检查这个值是否为整数时,两者都返回false,但是当我使用is_numeric($_REQUEST["age"])
. Saya ingin menyemak sama ada nilai parameter ialah integer, adakah saya menggunakan dua fungsi pertama dengan betul atau adakah saya kehilangan sesuatu?
Terima kasih
Nota: Saya cuba keluarkan gettype($_REQUEST["age"])
,它给我返回string
Versi pendek:
Gunakan
ctype_digit($_REQUEST['age'])
Versi terperinci:
Masalah anda ialah apabila anda menggunakan
gettype
时,$_REQUEST
返回一个字符串。即使该字符串在语义上是一个整数,比如16
, ia masih pembolehubah jenis rentetan, bukan pembolehubah jenis integer. Sebab anda mendapat keputusan yang berbeza daripada dua ujian ini adalah kerana mereka menguji perkara yang berbeza:is_numeric
测试一个字符串是否包含一个"可选符号、任意数量的数字、可选的小数部分和可选的指数部分",根据PHP文档。在你的情况下,该字符串只包含数字,所以测试返回True
.is_int
测试变量的类型是否为整数 - 但它不会是整数,因为它是由$_REQUEST
Dipulangkan.Sebab itu
is_numeric
返回True
而is_int
返回False
的原因:该字符串只包含数字(所以是"numeric"),但在技术上仍然是一个字符串类型,而不是整数类型(所以不是"int")。当然,is_numeric
对于整数测试来说是不够的,因为如果字符串有小数或使用科学计数法,它将返回True
, ialah nombor tetapi bukan integer.Untuk menguji sama ada
$_REQUEST
ialah integer, tanpa mengira jenis teknikal, anda boleh menguji sama ada semua aksara dalam rentetan ialah nombor (dan oleh itu keseluruhan rentetan ialah integer). Untuk ini anda boleh menggunakan ctype_digit:Ini akan berfungsi untuk
16
返回True
,但对16.5
或16e0
不返回True
- Ini akan membolehkan anda menapis integer daripada nombor bukan integer.