IS_INT()関数は、変数が整数型であるかどうかを確認するために使用されます。変数が整数である場合、 trueを返し、それ以外の場合はfalse 。 PHPでは、整数は42または-10などの部分的な部分のない数値です。
var_dump(is_int(42)); // true
var_dump(is_int('42')); // false
var_dump(is_int(42.0)); // false
上記の例では、 is_int()は適切に機能しますが、番号42は整数として認識されますが、文字列「42」も浮動小数点番号42.0も整数と見なされません。
PHPでは、多くの場合、入力として数値文字列( 「42」など)に遭遇し、それらが整数であるかどうかを判断しようとします。この時点で、 is_int()を使用して文字列を判断すると、 is_int()は数値の文字列ではなく、真の整数に対してのみtrueを返すため、エラーが発生します。
var_dump(is_int('42')); // false
var_dump(is_int('0')); // false
var_dump(is_int('123abc')); // false
「42」が整数のように見えても、実際には文字列であるため、 is_int()はfalseを返します。
PHPは、一部のタイプを他のタイプに自動的に変換します。たとえば、数値文字列で算術操作を実行すると、PHPはそれを整数に変換します。ただし、これは、文字列自体が整数型であることを意味するものではありません。
$var = '42';
echo $var + 1; // 43,整数に自動的に変換して計算します
ただし、 is_int()を使用してそれを確認すると、 IS_INT()が変数のタイプをチェックするため、その値を整数に変換できるかどうかではなく、結果がまだ誤っています。
別の一般的なトラップは、数字を含む文字列を入力として使用することです。誤って整数と見なします。たとえば、 「42」と「42」 (スペースのある文字列)は整数型ではありません。
var_dump(is_int('42')); // false
var_dump(is_int(' 42 ')); // false
「42」が数値文字列であっても、整数型ではなく、文字列タイプです。この不一致は、プログラムに論理的なエラーを引き起こす可能性があります。
文字列が整数であるかどうかを確認するのではなく、文字列が数字を表すかどうかを確認することが目標である場合、 is_numeric()関数がより良い選択かもしれません。 is_numeric()は、変数が数値または数値文字列である場合にtrueを返します。
var_dump(is_numeric('42')); // true
var_dump(is_numeric('42.5')); // true
var_dump(is_numeric('0')); // true
var_dump(is_numeric('abc')); // false
is_numeric()を使用すると、数値文字列を扱うとき、特にユーザーの入力または外部データを判断する必要がある場合は、 is_int()の制限を回避できます。
文字列を安全に整数に変換できるかどうかを実際に伝える必要がある場合は、 intval()関数を使用することを検討してください。intval()関数は、文字列を整数に変換するか、正規表現と組み合わせてより厳格なチェックを実行します。
$var = '42';
if (intval($var) == $var) {
echo "$var 整数に変換できる文字列です";
} else {
echo "$var 有効な整数ではありません";
}
または:
$var = '42';
if (preg_match('/^\d+$/', $var)) {
echo "$var 数字の文字列です";
} else {
echo "$var 不数字の文字列です";
}
この方法では、数値文字列を処理するためにis_int()への直接的な依存性を回避できます。