Ein Thema, das heute in der Gruppe besprochen wurde, bitte notieren Sie es.
Der Ursprung des Problems ist
var_dump(md5('240610708') == md5('QNKCDZO')); //true
Zwei MD5-Strings verwenden Der Vergleichsoperator (==) erweist sich als gleich.
Die folgenden zwei Werte werden ausgegeben:
md5('240610708') //0e462097431906509019562988736854
md5('QNKCDZO') //0e83040045199349405802 391
Sehen Sie sich die Ergebnisse an, Nein. Auf den ersten Blick fühlte es sich an, als wäre es intval, also gab 0 == 0 true zurück.
Nachdem ich später daran erinnert wurde, stellte ich fest, dass dies nicht der Fall war.
PHP-Vergleichsoperatoren:
http://php.net/manual/zh/sprache.operators.comparison.php
Beispiel:
如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。此规则也适用于 switch 语句。当用 === 或 !== 进行比较时则不进行类型转换,因为此时类型和数值都要比对。
<?php var_dump(0 == "a"); // 0 == 0 -> true var_dump("1" == "01"); // 1 == 1 -> true var_dump("10" == "1e1"); // 10 == 10 -> true var_dump(100 == "1e2"); // 100 == 100 -> true switch ("a") { case 0: echo "0"; break; case "a": // never reached because "a" is already matched with 0 echo "a"; break; } ?>
Das Obige hat die kleinen Fallstricke der PHP-schwachen Typisierung vorgestellt, einschließlich einiger Aspekte davon. Ich hoffe, dass es Freunden, die sich für PHP-Tutorials interessieren, hilfreich sein wird.