PHPでは、 is_intとis_doubleは、一般的に使用される2つのタイプチェック関数です。 IS_INTは、値が整数であるかどうかを判断するために使用され、 IS_Doubleは値が浮動小数点数かどうかを判断するために使用されます。これら2つの関数の関数は非常に直感的ですが、変数が浮動小数点数と整数であるかどうかをより効率的に決定する場合、単にIS_INTとIS_DOUBLEを個別に呼び出すと、特に高性能要件を持つアプリケーションで効率の問題が発生する場合があります。
PHPでは、 is_int()およびis_double()は、変数タイプのチェックに使用される内蔵機能です。 is_int()関数は、変数が整数であるかどうかを検出するために使用され、変数が整数であることを示すためにtrueを返し、 falseを返して整数ではないことを示します。 is_double () (変数が浮動小数点数かどうかを確認するために使用することもできます。これは、フローティングポイント数を表すためにtrueを返し、 falseはフロートの数字を表すこともできます。
これらの2つの関数は通常、単一のタイプを判断するために使用されますが、それらを一緒に使用して、変数が浮動小数点数か整数かを区別することもできます。問題は、PHPがさまざまな状況に応じて、特に数値文字列やその他のタイプの値では、より詳細な区別が必要になる場合がある場合、数値タイプを対応するタイプに自動的に変換することです。
is_int()またはis_double()のみを使用して変数タイプを個別にチェックする場合、次の問題に遭遇する可能性があります。
タイプ変換:PHPには自動タイプ変換があります。つまり、整数のように見えるいくつかの浮動小数点数(1.0など)が整数と判断されます。
パフォーマンスオーバーヘッド: is_int()およびis_double()関数が呼ばれるたびに、PHPは変数のタイプをチェックします。複雑なコードロジックの場合、これによりパフォーマンスが頭上になる可能性があります。
phpのis_int()およびis_double()を正確に区別できないことは、文字列番号、ブール人、その他のタイプを正確に区別できない場合があります。
浮動小数点数をより効率的に整数とより効率的に区別するために、PHPのタイプチェック関数とその他の方法を組み合わせて、より正確な判断を実現できます。
まず、 is_int()を使用して、変数が整数であるかどうかを判断します。整数の場合は、チェックを継続する必要はありません。
<span><span><span class="hljs-variable">$value</span></span><span> = </span><span><span class="hljs-number">5</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_int</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"This is an integer."</span></span><span>;
}
</span></span>
浮動小数点数の判断のために、 IS_Double()は、 IS_INT()が整数として1.0を誤って判断することを避けるために、追加のチェック条件と組み合わせて使用する必要があります。 is_int()を除外することにより、浮動小数点数の正確な識別を確保できます。
<span><span><span class="hljs-variable">$value</span></span><span> = </span><span><span class="hljs-number">5.5</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_double</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>) && !</span><span><span class="hljs-title function_ invoke__">is_int</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"This is a float."</span></span><span>;
}
</span></span>
数値変数だけではないことを確認する場合は、 is_numeric()を使用して、文字列を数値に変換できるかどうかを判断することもできます。次に、最終的な判断は、is_int()およびis_double()を介して行われます。
<span><span><span class="hljs-variable">$value</span></span><span> = </span><span><span class="hljs-string">"10.5"</span></span><span>; </span><span><span class="hljs-comment">// 文字列番号</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_numeric</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>)) {
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>, </span><span><span class="hljs-string">'.'</span></span><span>) !== </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"This is a float."</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"This is an integer."</span></span><span>;
}
}
</span></span>
is_int() 、 is_double() 、 is_numeric()などの関数を組み合わせることにより、変数のタイプを効率的かつ正確に判断し、これら2つの関数を使用するだけで原因となる可能性のある誤判断とパフォーマンスの問題を回避できます。より複雑なシナリオの場合、最初に予備スクリーニングにis_numeric()を使用してから、実際のニーズに基づいて判断ロジックをさらに改善することをお勧めします。
この最適化方法により、コードの読みやすさと実行効率を改善しながら、フローティングポイント数と整数をより正確に区別できます。