Ausführliche Erklärung häufiger Traps in PHP-Zahlen und -Strings

伊谢尔伦
Freigeben: 2023-03-10 22:28:02
Original
1760 Leute haben es durchsucht

0 Vergleicht (-Operator ist ==) mit jeder führenden -Zeichenfolge, die keine Zahl ist (oder mit anderen Worten ein Zeichen, das nicht in eine Zahl umgewandelt werden kann). und gibt true zurück.

Der Grund dafür ist, dass beim Vergleichen von Zahlen mit Zeichenfolgen zunächst versucht wird, die Zeichenfolge in eine Zahl umzuwandeln, und dann zu vergleichen. Wenn eine Zeichenfolge nicht in eine Zahl umgewandelt werden kann, ist das Konvertierungsergebnis 0. Ein Vergleich mit 0 gibt also immer true zurück.

Wenn in PHP zwei numerische Zeichenfolgen (Zeichenfolgen, die nur Zahlen enthalten) verglichen werden, werden sie zum Vergleich direkt in numerische Werte umgewandelt

Das folgende Beispiel : (Beachten Sie, dass $a und $ bdie letzten Ziffern der beiden Variablen nicht gleich sind)

Beispielcode:

<?php 
$a = &#39;511203199106034578&#39;; 
$b = &#39;511203199106034579&#39;; 
if ($a==$b) { 
echo &#39;equal&#39;; 
} else { 
echo &#39;notEqual&#39;; 
} 
?>
Nach dem Login kopieren

Führen Sie das obige Programm aus, stellen Sie jedoch fest, dass das Ergebnis gleich ist (nicht). Ergebnis, das wir dachten) Wir setzen $a bzw. fügen einen Buchstaben a zu $b hinzu

<?php 
$a = &#39;a511203199106034578&#39;; 
$b = &#39;a511203199106034579&#39;; 
if ($a==$b) { 
echo &#39;equal&#39;; 
} else { 
echo &#39;notEqual&#39;; 
} 
?>
Nach dem Login kopieren

Dieses Mal ist die Ausgabe notEqual (das richtige Ergebnis)

Erklärung: Das obige Beispiel ist gleich weil PHP zwei numerische Zeichenfolgen in einen numerischen Typ umwandelt und die beiden Zahlen genau gleich sind

<?php 
$a = 511203199106034578; 
$b = 511203199106034579; 
echo $a; // 输出 5.1120319910603E+17 即511203199106030000 
echo $b; // 输出 5.1120319910603E+17 即511203199106030000 
?>
Nach dem Login kopieren

Das Ergebnis, das wir im Beispiel erhalten, ist also gleich
Um dieses unerwartete Ergebnis zu vermeiden, verwenden Sie den Typvergleich Operator == =Das folgende Beispiel (wenn $a gleich $b ist und ihre Typen auch gleich sind)

<?php 
$a = &#39;511203199106034578&#39;; 
$b = &#39;511203199106034579&#39;; 
if ($a===$b) { 
echo &#39;equal&#39;; 
} else { 
echo &#39;notEqual&#39;; 
} 
?>
Nach dem Login kopieren

Erklären Sie es anhand eines Beispiels

<?php
$str1 = "123456789012345678";
$str2 = "123456789012345679";
if($str1 == $str2){
 echo "1.equal\n";
}esle{
 echo "1.not equal\n";
}
if($str1 === $str2){
 echo "2.equal\n";
}esle{
 echo "2.not equal\n";
}
if(strcmp($st1, $str2)==0){
 echo "3.equal\n";
}esle{
 echo "3.not equal\n";
}
if($str1 == $str2){
 echo "1.equal\n";
}esle{
 echo "1.not equal\n";
}
Nach dem Login kopieren

Das Ergebnis danach Das Ausführen ist ziemlich seltsam:

1.gleich

2.ungleich

3.ungleich

Nach Überprüfung des Grundes, wenn PHP zwei Zahlen vergleicht Zeichenfolgen, zuerst Diese beiden Zeichenfolgen werden als Zahlen behandelt und in wissenschaftlicher Notation gespeichert, die 16 Dezimalstellen beibehält. Mit anderen Worten, beim Speichern gilt: $str1=1.2345678901234567E+17; $str2=1.2345678901234567E+17. Es wird also festgestellt, dass $str1==$str2. Unterschiedliche Längen, das Hinzufügen nicht numerischer Zeichen zur Zeichenfolge usw. führen dazu, dass die beiden Zeichenfolgen ungleich sind. Daher wird empfohlen, die dreifache Gleichheitszeichenbeurteilung zu verwenden, wenn der Datentyp bestimmt werden kann, oder strcmp oder strcasecmp für eine starke Typbeurteilung zu verwenden.

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung häufiger Traps in PHP-Zahlen und -Strings. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!