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值都会被完全处理,结果如下所示。
全部都是真实的。
被区分。
Summary-总结
・当进行字符串型与数值型的比较时,字符串型会被强制转换为数值型。
・当进行字符串型与字符串型的比较时,如果两者都是数值形式,将会被强制转换为数值型。
・在使用”==”和”===”时要注意区别,尤其是在比较null、false、””和0时,因为”==”会把它们都强制转换为”0″,导致比较结果为true。
-要使用”===”进行比较,避免进行强制转换。