0

OK、いくつかのガイドを読みましたが、この目的についてはまだ少し混乱しています。

以前の開発者から拾ったプロジェクトで、次のような項目がすべて含まれているコードを少し見つけました。

if (is_numeric($var) && ((int)$var == $var){

2 番目のチェックで $var を int に型キャストする目的は何ですか? $var が数値でない場合、または少なくとも数値に評価できる文字列である場合、全体が false と評価されます。$var が数値ではなく文字列であっても、文字列が数値に評価できる場合、2 番目のチェックは true に評価されます。

is_numeric() をそのまま使用する方が理にかなっているのではないでしょうか?

4

3 に答える 3

2

これは一般的な問題を解決するための試みです。これは、一見明白な戦略に制限があるためです。

  • is_numeric($var)次のような多くの形式の数値に対して true を返します。'1.5e10'
  • (int)$var == $var数値を に変換するintと、元の値と比較される値になることを確認しますが、数値以外の文字列の場合、PHP は賢くしようとします。'1a' == 1

両方のチェックが成功した場合、それは整数です。おめでとうございます。

ただし、正の整数が必要なctype_digit((string)$var)場合は、文字列に数字のみが含まれているかどうかを単純にチェックする の方がはるかにコンパクトな代替手段です。

参照:変数が整数かどうかを確認する php チェック

于 2013-10-13T04:24:16.123 に答える
0

コメントで述べたis_numericように、変数が数値かどうかを確認するだけです。2 番目のチェック(int)$var == $varでは、数値の整数値が数値と等しいかどうかを確認します。つまり、数値が整数の場合です。

数値が実数の場合、is_numerictrue を返します。しかし、2 番目のチェックでは、実数が整数にキャストされます。したがって、3.14 は 3 になり、3==3.14失敗します。

2 番目のチェックは、数値が整数の場合にのみ true を返します。

于 2013-10-13T04:17:38.377 に答える
0

cole が既に指摘したように、この関数は、特定の値が数値であるis_numericかどうかを示します。数値は整数である場合とそうでない場合があります。$var

(int)$var == $var、整数かどうかをチェックしています。これにはis_intを使用することもできます。

于 2013-10-13T04:20:58.627 に答える