PHP粉丝播客

首先

这是我初次投稿。
因为对于PHP字符串及其他比较的转换不太明白,所以我自己总结了一下。

不是一个故障,而是设计要求。

if ("3aaaaa" == 3) 
{
    echo "true";
}
else
{
    echo "false";
}

那么结果会是什么样呢?
结果会是~

我最初很惊讶,但似乎这是由于PHP的规定。

当在PHP中进行不同类型的比较,如字符串类型和数值类型,字符串将会被转换为数值型。

由于这个规范,将字符串转换为整数。

echo (int)"3aaaaaaa";    //3 と出力される
echo (int)"hoge";        //0 と出力される
echo (int)"01aaaaa";     //1 と出力される
echo (int)"   01db";     //1 と出力される

根据显示,可以看出角色也有规定。

如果字符串的开头是数字,则将该数字提取出来,
否则将其设为0。
注意,开头的空格或0将被忽略。

有些例外情况的存在。。。

只需要一种选项:例外。

如果字符串是以数值形式表示的话

if ("3.0" == "3") {
    echo "true";
}else{
    echo "false";
}

结果是真的。

if ("3e0" == "3") {
    echo "true";
}else{
    echo "false";
}

结果为真。

哎呀~怪了呢~用引号(””)括起来所以应该是字符串的,可是~~这也是类型转换的规定。

在PHP中,当比较数值格式的字符串时,它们会被比较为整数。换句话说,即使是字符串类型和字符串类型的比较,只要比较对象都是数值格式(可以被解释为数字的字符串),就会被视为整数类型的比较。

以下是一些被视为数字的字符串:
“123” ← 只有数字
“3.0” ← 小数点
“-6” ← 负数
“0003” ← 以0开头,后面是纯数字
“1e3” ← 科学计数法表示的浮点数
“0x3A” ← 十六进制数

很多的0

if ( null == false) {
    echo "true";
}else{
    echo "false";
}
if ( 0 == "") {
    echo "true";
}else{
    echo "false";
}

结果两者都是true,虽然很难理解true元素在哪里,但这也是类型转换的原因。所有的元素都被转换为0,所以是true。真是太糟糕了。

防治措施

    • 比較などをする際は必ず””(ダブルクォーテーション)で囲うなど型を意識して使う

例外などを除きある程度これで対策できる

===(イコールイコールイコール)を使う

===は$aが$bに等しく、および同じ型である場合にtrueとなるので型変換が行われず比較が行われる。
但し何も考えずすべて===を使用すると動的型付け言語であるPHPとしては少々もったいないので適材適所==と===を使い分ける。

因此,当使用”===”时,上述的所有0值都会被完全处理,结果如下所示。

==nullfalse“”0nulltruetruetruetruefalsetruetruetruetrue””truetruetruetrue0truetruetruetrue

全部都是真实的。

===nullfalse“”0nulltruefalsefalsefalsefalsefalsetruefalsefalse””falsefalsetruefalse0falsefalsefalsetrue

被区分。

Summary-总结

・当进行字符串型与数值型的比较时,字符串型会被强制转换为数值型。
・当进行字符串型与字符串型的比较时,如果两者都是数值形式,将会被强制转换为数值型。
・在使用”==”和”===”时要注意区别,尤其是在比较null、false、””和0时,因为”==”会把它们都强制转换为”0″,导致比较结果为true。
-要使用”===”进行比较,避免进行强制转换。

广告
将在 10 秒后关闭
bannerAds