ホームページ >バックエンド開発 >PHPチュートリアル >PHPマスター|あなたが知らないかもしれない3つの奇妙なPHPの事実
PHPの柔軟性と使いやすさは、驚くべき行動をマスクすることがあります。この記事では、そのような3つの癖を調査し、根本的な原因を説明し、ソリューションを提供しています。
キーテイクアウト:
(int)((0.1 0.7) * 10)
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.7
PHPの文字列増分動作は、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>に影響します。 考えてみてください:
に等しい非空白の文字列を考慮しているため、関数はを返します。 厳密な比較を実施するには、3番目のパラメーターを使用します:in_array()
結論:in_array()
これらの例は、PHPの潜在的な落とし穴を強調しています。 常に浮動小数点精度の制限に注意し、PHPの一意の文字列増分動作を理解し、アレイを扱うときに厳格な比較を使用し、in_array()
を使用して予期しない結果を回避します。 堅牢で予測可能なコードを書くためには、PHPのタイプ処理を完全に理解することが不可欠です。
Fotolia
(FAQSセクションは、メインコンテンツを大部分繰り返し、提供されたFAQが提示された3つの奇妙な事実に直接関係していなかったため削除されました。)
以上がPHPマスター|あなたが知らないかもしれない3つの奇妙なPHPの事実の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。