Heim > Backend-Entwicklung > PHP-Tutorial > PHP-kleine Fallstricke bei schwacher Eingabe

PHP-kleine Fallstricke bei schwacher Eingabe

WBOY
Freigeben: 2016-08-08 09:31:38
Original
1164 Leute haben es durchsucht

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 语句。当用 === 或 !== 进行比较时则不进行类型转换,因为此时类型和数值都要比对。
Nach dem Login kopieren
<?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;
}
?>
Nach dem Login kopieren

Das heißt Diese Gleichheit liegt nicht daran, dass die beiden Zeichenfolgen intval sind und zu 0=0
werden, sondern numerisch 0e4xxx == 0e8xxx, was einer wissenschaftlichen Schreibweise entspricht, 0*10 hoch n-ter Potenz, also 0,0000 und 0,00000000
Es wird also gleiche Ergebnisse geben.

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.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage