短縮版:
使用するctype_digit($_REQUEST['age'])
長いバージョン:
を使用したときにわかったように、問題はstringgettype
を$_REQUEST
返すことです。その文字列が のように意味的に整数であったとしても、それは文字列型であり、整数型の変数ではありません。2 つのテストは異なるものをテストするため、異なる結果が得られます。16
is_numeric
PHP docsに従って、文字列に「オプションの符号、任意の桁数、オプションの小数部、およびオプションの指数部」が含まれているかどうかをテストします。あなたの場合、文字列には数字しか含まれていないため、テストは を返しますTrue
。
is_int
は、変数の型が整数かどうかをテストします$_REQUEST
。
そのため、return while is_numeric
returns : 文字列には数字のみが含まれます (したがって「数値」です) が、技術的には整数型ではなく文字列型です (したがって「int ではありません」)。もちろん、整数テストには十分ではありません。文字列に 10 進数がある場合、または科学表記法を使用している場合、つまり数値であるが整数ではない場合に返されるためです。True
is_int
False
is_numeric
True
が整数であるかどうかをテストするに$_REQUEST
は、技術的なタイプに関係なく、文字列内のすべての文字が数字であるかどうか (つまり、文字列全体が整数かどうか) をテストできます。これには、ctype_digitを使用できます。
ctype_digit($_REQUEST['age'])
これはTrue
forを返しますが、 orを返し16
ません- 数値の非整数から整数を取り除きます。16.5
16e0