Bei der Verwendung von PHP zum String-Vergleich bin ich auf eine Falle gestoßen, wie im Code gezeigt:
<?php
var_dump('00E73694765433'=='0'); //true
var_dump('0134b40fsbi94u8'=='0'); //false
var_dump('0134b40fsbi94u8'=='134'); //false
echo PHP_EOL;
var_dump(is_numeric('00E73694765433'));//true
var_dump(is_numeric('0134b40fsbi94u8'));//false
?>
Das erste erhaltene Ergebnis ist wahr, während das zweite falsch ist. Wenn nach Durchsicht der offiziellen Dokumente die erste Zahl zwangsweise in die Zahl 0 umgewandelt werden muss, dann sollte die zweite Zahl zwangsweise in 134 umgewandelt werden, aber wenn sie in 134 umgewandelt wird, sollte die dritte Zahl korrekt sein.
Ich habe zwei Zeichenfolgen gedruckt und das Ergebnis war sehr seltsam. Ich konnte es nicht verstehen, nachdem ich die offiziellen Dokumente gelesen hatte.
http://www.php.net/manual/zh/...
var_dump('0134b40fsbi94u8'=='134'); //false 是比较的
因为都是字符串 就先比较第一位 第一位的比较结果 是0和1的比较 所以 是false
另外 字符串之间的不建议使用比较运算符直接去比较大小,要是在需要比较php也提供了一些字符的比较函数
不同类型的数据比较,最好还是用全等===和不全等!==运算符.
因为比较运算符全等===和不全等!==会对类型进行检查:
一句话,比较时尽量用===和!==而不用==和!=.
此外,PHP还提供了一系列类型检查函数:
一些函数,也提供有类型检查参数,需要注意,比如:
第三个参数的值为 true 则函数还会检查类型是否相同.
另外,PHP还支持用比较运算符==,!=,===,!==来比较两个数组或两个对象是否相等.
PHP还支持用比较运算符(==,!=,===,!==)判断两个对象是否相等:
你第一个字符串恰好符合了科学计数法。
对于类型限制不严的语言,常有这样的坑上新闻。
尽量使用严格带类型的检查
对于 php 这种弱类型语言,能用
===
就别用==