PHPのタイプの弱い性質のために、あなたがそれらのいくつかの良い、いくつかの奇妙なことを行うことができ、そのうちのいくつかは、あなたが内部の穴に落ちるようになります。例えば:
エコー '1' + 5 ;
一部の言語では、これは、プログラムがクラッシュする可能性がありますが、PHPは整数に任意の文字列を計算しようとします。この場合には、1〜5の整数に文字列を変換し、6を生成するために追加されます。
あなたはJavaScriptでこれを行う場合はところで、あなたは反対の結果を見つけるでしょう。同じ文字との接続には、文字を追加しているので任意の現在の値が文字列であれば、JavaScriptは常に値を切り捨てるしようとします。だから、JavaScriptで結果が「15」になります
私たちは、「1」の文字列に文字列を変更し、同じ操作を実行した場合、結果は5です。
エコー '1' + 5 ;
PHPは文字列を整数に変換できない場合は、それが0に想定されるためです。
私たちは、それは別のレベルに昇格比較することができます。ビューPHP型の比較表は、次の2つの値を比較するには、2つの異なる方法があります見ることができます。
次のコードスニペットを考えてみましょう。私たちは、結果がどうなるかを楽しみにして?
-
$ = '文字列' ;
-
$ bの = 0 ;
-
-
if ( $a == true && $b == false && $a == $b ) {
-
exit ;
-
}
那么答案是程序会退出,因为所有这些比较都是正确的。
'a string'== true等于true,因为如果与布尔值进行比较,PHP会将任何非空字符串计算为true。
0 == false等于true,因为与布尔值比较时,整数0被计算为false。
'a string'== 0也计算为true,因为与整数相比,任何字符串都会转换为整数。如果PHP无法正确转换字符串,则将其计算为0.因此0等于0,等于为真。
要解决此问题,您可以使用===运算符代替==运算符。此运算符(也称为三重等于运算符)仅在两个值具有相同值时才会求值为true,如果它们是相同类型,则仅计算为true 。因此,如果我们将示例更改为使用三等于运算符,则所有项都将计算为false。这是因为字符串不能是布尔值,整数不能是布尔值,字符串不等于整数。
两个等于运算符之间的差异很重要。每个都有它自己的用途,但如果你对你的价值类型有任何疑问,那么使用三等于运算符,特别是当通过测试会给你的程序带来灾难。
strpos()関数などを使用する場合、三重等号演算子は不可欠です。文字列が見つからない場合にはfalseを返すためです。次の例では$の位置変数がfalseに等しいです。
$位置 = strpos('ABCD' 、'Z' )。
文字列が位置0で発見された場合はどうなりますか?あなたは二つの等しい演算子を使用する場合は、あなたの位置がfalseに等しくなりますことがわかります。
もし(!偽== strpos('ABCD' 、'A' )){
エコー'が見つかり' ;
} 他 {
エコー「が見つかりません」。
}