ホームページ php教程 php手册 php比较运算符的bug

php比较运算符的bug

Jun 13, 2016 am 10:56 AM
bug php なぜ コード 現れる 比較する 疑い オペレーター 最初に選んだ

疑问
首选,给出一个php的示例代码,如果你完全明白为什么会出现如下结果,就不需要再在这篇博客浪费时间了,这里是让php初学者注意一下可能会犯的错误


[php]
 
var_dump("abcdefg" == "0");    // bool(false)  
var_dump("abdsafd" == 0);      // bool(true) 

var_dump("abcdefg" == "0");    // bool(false)
var_dump("abdsafd" == 0);      // bool(true)
如果你不是太清楚上面的结果,那就跟着博客继续学习下去吧!


比较运算符
比较运算符,如同它们名称所暗示的,允许对两个值进行比较。


比较运算符 例子 名称 结果
$a == $b 等于 TRUE,如果$a等于$b
$a === $b 全等 TRUE,如果$a等于$b,并且它们的类型也相同
$a != $b 不等 TRUE,如果$a不等于$b
$a $b 不等 TRUE,如果$a不等于$b
$a !== $b 非全等 TRUE,如果$a不等于$b,或者它们的类型不同
$a $a > $b 大于 TRUE,如果$a严格大于$b
$a $a >= $b 大于等于 TRUE,如果$a大于或者等于$b

注意:
如果比较一个整数和字符串,则字符串会被转换为整数
如果比较两个数字字符串,则作为整数比较


讲到这里,就可以说一下上面那个php代码了,var_dump("abcdefg" == "0")为false,是因为这是两个字符串比较,对应于c的strcmp函数,因此应该为false。然而,var_dump("abdsafd" == 0)为true,则需要学习一下字符串转换为整数的规则了

 


字符串转换为整数
当一个字符串被用在了一个数字的环境中,结果和类型如下:


如果字符串没有包含‘.’、'e'或'E',并且数字值符合整数类型的限定(PHP_INT_MAX定义的),这个字符串可被认定是一个integer,在其它情况下被认定为一个float


字符串的开始部分给定了它的值,如果字符串以合法的数字开始,这个数字就可直接使用。否则,值就是0.合法数值由符号,后面跟着一个或多个数字(可能有个小数点),再跟着可选的指数符号如'e'或'E',后面跟着一个或多个数字。


示例代码:


[php]
 
$foo = 1 + "10.5";                // $foo is float (11.5)  
$foo = 1 + "bob-1.3e3";           // $foo is integer (1)  
$foo = 1 + "bob3";                // $foo is integer (1)  
$foo = 1 + "10 Small Pigs";       // $foo is integer (11)  
$foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2)  
$foo = "10.0 pigs " + 1;          // $foo is float (11)  
$foo = "10.0 pigs " + 1.0;        // $foo is float (11)  
?> 

$foo = 1 + "10.5";                // $foo is float (11.5)
$foo = 1 + "bob-1.3e3";           // $foo is integer (1)
$foo = 1 + "bob3";                // $foo is integer (1)
$foo = 1 + "10 Small Pigs";       // $foo is integer (11)
$foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2)
$foo = "10.0 pigs " + 1;          // $foo is float (11)
$foo = "10.0 pigs " + 1.0;        // $foo is float (11)
?>
这里应该可以彻底解释var_dump("abcdefg" == 0)为true了,因为比较运算符首先将“abcdefg”强制转换为整数0,因为0==0为true了

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 Apr 06, 2025 am 12:03 AM

PHP8では、一致式は、式の値に基づいて異なる結果を返す新しい制御構造です。 1)Switchステートメントに似ていますが、実行ステートメントブロックの代わりに値を返します。 2)一致式の式は厳密に比較され、セキュリティが向上します。 3)スイッチステートメントの脱落の可能性を回避し、コードのシンプルさと読みやすさを向上させます。

H5ページの生産には継続的なメンテナンスが必要ですか? H5ページの生産には継続的なメンテナンスが必要ですか? Apr 05, 2025 pm 11:27 PM

H5ページは、コードの脆弱性、ブラウザー互換性、パフォーマンスの最適化、セキュリティの更新、ユーザーエクスペリエンスの改善などの要因のため、継続的に維持する必要があります。効果的なメンテナンス方法には、完全なテストシステムの確立、バージョン制御ツールの使用、定期的にページのパフォーマンスの監視、ユーザーフィードバックの収集、メンテナンス計画の策定が含まれます。

JSはH5なしで実行できますか? JSはH5なしで実行できますか? Apr 06, 2025 am 09:06 AM

JavaScriptはHTML5なしで実行できますか? JavaScriptエンジン自体は独立して実行できます。ブラウザ環境でJavaScriptを実行すると、コードをロードおよび実行するために必要な標準化された環境を提供するため、HTML5に依存します。 HTML5が提供するAPIと機能は、最新のJavaScriptフレームワークとライブラリにとって重要です。 HTML5環境がなければ、多くのJavaScript機能を実装が困難であるか、実装できません。

PHP関数引数と配列の開梱で...(SPLAT)演算子の目的と使用について説明してください。 PHP関数引数と配列の開梱で...(SPLAT)演算子の目的と使用について説明してください。 Apr 06, 2025 am 12:07 AM

PHPの...(SPLAT)演算子は、機能パラメーターと配列を開梱するために使用され、コードのシンプルさと効率を向上させます。 1)関数パラメーター解放:アレイ要素をパラメーターとして関数に渡します。 2)配列の開梱:アレイを別の配列または関数パラメーターに解除します。

H5ページの生産の利点は何ですか H5ページの生産の利点は何ですか Apr 05, 2025 pm 11:48 PM

H5ページの生産の利点には、軽量エクスペリエンス、積み込み速度、ユーザー保持の改善が含まれます。クロスプラットフォームの互換性、さまざまなプラットフォームに適応する必要はなく、開発効率を向上させます。柔軟性と動的な更新、監査が不要で、コンテンツの変更と更新が容易になります。ネイティブアプリよりも費用対効果の高い開発コスト。

クロスサイトリクエストフォーファリー(CSRF)とは何ですか?また、PHPにCSRF保護をどのように実装しますか? クロスサイトリクエストフォーファリー(CSRF)とは何ですか?また、PHPにCSRF保護をどのように実装しますか? Apr 07, 2025 am 12:02 AM

PHPでは、予測不可能なトークンを使用して、CSRF攻撃を効果的に防ぐことができます。特定の方法には次のものが含まれます。1。フォームのCSRFトークンを生成および埋め込みます。 2.リクエストを処理するときにトークンの有効性を確認します。

どのようにしてクラスが拡張されたり、PHPでメソッドがオーバーライドされたりするのを防ぐことができますか? (最終キーワード) どのようにしてクラスが拡張されたり、PHPでメソッドがオーバーライドされたりするのを防ぐことができますか? (最終キーワード) Apr 08, 2025 am 12:03 AM

PHPでは、最終的なキーワードを使用して、クラスが継承されないようにし、メソッドが上書きされます。 1)クラスを決勝としてマークする場合、クラスを継承することはできません。 2)メソッドを最終的にマークする場合、メソッドはサブクラスによって書き換えられません。最終的なキーワードを使用すると、コードの安定性とセキュリティが保証されます。

エッジブラウザの特定のDIV要素が表示されないのはなぜですか?この問題を解決する方法は? エッジブラウザの特定のDIV要素が表示されないのはなぜですか?この問題を解決する方法は? Apr 05, 2025 pm 08:21 PM

ユーザーエージェントスタイルシートによって引き起こされるディスプレイの問題を解決する方法は? Edgeブラウザを使用する場合、プロジェクトのDIV要素を表示することはできません。チェックした後、私は投稿しました...

See all articles