ホームページ >バックエンド開発 >PHPチュートリアル >PHPマスター|あなたが知らないかもしれない3つの奇妙なPHPの事実

PHPマスター|あなたが知らないかもしれない3つの奇妙なPHPの事実

William Shakespeare
William Shakespeareオリジナル
2025-02-25 18:31:12822ブラウズ

PHP Master | 3 Strange PHP Facts You May Not Know

PHPの柔軟性と使いやすさは、驚くべき行動をマスクすることがあります。この記事では、そのような3つの癖を調査し、根本的な原因を説明し、ソリューションを提供しています。

キーテイクアウト:

  • 浮動小数点精度の制限:フローティングポイント数を含む計算は、実数のコンピューター表現の固有の制限により、予期しない結果をもたらす可能性があります。たとえば、は予想される8の代わりに7を返す可能性があります(int)((0.1 0.7) * 10)
  • 文字列増分挙動:PHPの文字列の増加は一意に動作します。文字列が数字で終了する場合、数値部分は増加します。文字で終了した場合、最後の文字はアルファベット順に進みます。 非アルファニュメンタの後続のキャラクターは影響を受けません。
  • ゆるい比較:in_array()関数のデフォルトのゆるい比較は、誤検知につながる可能性があります。 空ではない文字列は、正確な結果には、in_array()および非ゼロの数値とゼロ以外の数値にゆるく等しくなります。 true true
  • フローティングポイントの不正確さ:

浮動小数点数は、すべての実数を完全に表すことはできません。 一見正確に表されている数字の操作は、微妙な不正確さにつながる可能性があります。これはPHPに固有のものではありません。これは、コンピューターの算術の基本的な制限です。 古典的な記事「すべてのコンピューター科学者が浮かんでいる算術について知っておくべきこと」は、詳細な説明を提供します。 このコードを検討してください:

出力は8ではなく7です。中間計算

は、精度の制限により0.8をわずかに少ない値にします。 10を掛けると、このエラーが保存され、整数にキャストすると分数部分が切り捨てられ、7になります。 これを軽減するには、精度が重要な場合はbcmath任意の精度関数を使用します。

文字列増分Quirks:
<code class="language-php"><?php echo (int) ((0.1 + 0.7) * 10); ?></code>

0.1 0.7PHPの文字列増分動作は、Cのような言語とは異なります。これらの例を調べてみましょう。

その数字で終了する文字列上の増分演算子(

)。文字で終了した場合、最後の文字はアルファベット順に増加します。 非金の字で終わる文字列は変わらないままです。 この動作は、文書化されていますが、しばしば見落とされがちです

およびゆるい比較:

PHPのゆるい比較ルールは
<code class="language-php"><?php
$a = 'fact_2'; echo ++$a; // Output: fact_3
$a = '2nd_fact'; echo ++$a; // Output: 2nd_facu
$a = 'a_fact'; echo ++$a; // Output: a_facu
$a = 'a_fact?'; echo ++$a; // Output: a_fact?
?></code>
に影響します。 考えてみてください:

PHPのゆるい比較は、

に等しい非空白の文字列を考慮しているため、関数はを返します。 厳密な比較を実施するには、3番目のパラメーターを使用します:in_array()

結論:in_array()

これらの例は、PHPの潜在的な落とし穴を強調しています。 常に浮動小数点精度の制限に注意し、PHPの一意の文字列増分動作を理解し、アレイを扱うときに厳格な比較を使用し、in_array()を使用して予期しない結果を回避します。 堅牢で予測可能なコードを書くためには、PHPのタイプ処理を完全に理解することが不可欠です。 Fotolia

(FAQSセクションは、メインコンテンツを大部分繰り返し、提供されたFAQが提示された3つの奇妙な事実に直接関係していなかったため削除されました。)

以上がPHPマスター|あなたが知らないかもしれない3つの奇妙なPHPの事実の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。