Heim >Backend-Entwicklung >PHP-Tutorial >Fallstricke 2, auf die PHP stoßen kann

Fallstricke 2, auf die PHP stoßen kann

小云云
小云云Original
2018-03-19 15:00:351275Durchsuche

Zuvor haben wir Ihnen die Falle 1 mitgeteilt, in die PHP geraten könnte. In diesem Artikel werden wir mit Ihnen die Falle 2 teilen, in die PHP geraten könnte.

Einige der Fallstricke, auf die ich im eigentlichen Entwicklungsprozess von PHP stieß, waren auf mein mangelndes Verständnis zurückzuführen. Als ich der Sache auf den Grund ging, brach ich wirklich in Tränen aus.

Was den Vergleich von Ganzzahlen und Strings betrifft, habe ich dieses Problem einmal für andere behoben, aber am Ende wollte ich nicht selbst darauf hereinfallen. Es war wirklich peinlich . Ich habe es aufgeschrieben, um zu verhindern, dass es noch einmal passiert!

Schauen wir uns dieses Beispiel direkt an:

<?php
$foo = 0;
$bar = &#39;a3b4c5&#39;;
if ( $foo < $bar ) {
    echo &#39;output&#39;;
}

Will Wird es eine Ausgabe geben? Die Antwort lautet: Nein. Denn wenn eine Zahl mit einer Zeichenfolge verglichen wird, wird die Zeichenfolge in eine Zahl umgewandelt. Wenn Sie die Funktion intval( $bar ) aufrufen, die sie in eine Ganzzahl umwandelt, werden Sie feststellen, dass ihr Wert 0 ist , also wird es das natürlich nicht tun. Es ist größer als 0. Wenn der Wert von $bar '3a4b5c' ist, wird das Ergebnis ausgegeben, da der Wert der in eine Zahl umgewandelten Zeichenfolge 3 ist. Spezifische Konvertierungsregeln finden Sie in PHP Handbuch:

http://us2.php.net/manual/zh/sprache.types.string.php#sprache.types.string.conversion

Wenn $foo auf '' initialisiert wird, tritt beim Vergleich zweier Zeichenfolgen tatsächlich kein Fehler auf.

Werfen wir einen Blick auf eine andere Grube:

if ( $foo == &#39;a1b2c3&#39; ) {
    echo &#39;output&#39;;
}

Dieses Treffen Will es nicht exportiert werden? Die Antwort lautet: Ja, der Grund ist eigentlich derselbe wie oben: „a1b2c3“ wird beim Vergleich implizit in den Typ 0 konvertiert.

Die Lösung für das obige Problem besteht einfach darin, die beiden Zahlen mit demselben Typ ohne implizite Typkonvertierung zu vergleichen. Zu diesem Zeitpunkt kommt das kongruente Vorzeichen (===) ins Spiel. , denn die drei Gleichheitszeichen vergleichen nicht nur Werte, sondern auch Typen. Wenn Sie beim Vergleichen von Zeichenfolgen außerdem die Funktion strcmp () verwenden, tritt dieses Problem nicht auf.

Ein weiteres Beispiel:

$checkedKeys = array(&#39;someKey1&#39;, &#39;someKey2&#39;);
$arrTest = array(&#39;someKey1&#39; => &#39;someValue&#39;, &#39;otherValue&#39;);
foreach ($arrTest as $key => $value)
{
	if (in_array($key, $checkedKeys))
	{
		echo "The key valid: $key \n";
	}
}

Ähnlich wird es hier zwei Ausgänge geben, Nr. Der $key der sekundären Ausgabe ist 0, verstehen Sie? Die Lösung besteht darin, den dritten Parameter zur Funktion in_array() hinzuzufügen und ihn auf true zu setzen, um einen strikten Typvergleich durchzuführen. Das Dokument finden Sie hier: http://php.net/manual/zh/function.in-array.php

Einer der großen Vorteile der PHP-Sprache ist ihre Flexibilität, und dies birgt auch versteckte Gefahren für Codes, die nicht sorgfältig und sorgfältig geschrieben werden.

Verwandte Empfehlungen:

Pipe 1, in die PHP fallen könnte

Das obige ist der detaillierte Inhalt vonFallstricke 2, auf die PHP stoßen kann. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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