Bevor Sie tiefer gehen, werfen wir einen Blick auf die grundlegende Verwendung von STRCMP .
<?php
$result = strcmp("apple", "banana");
echo $result; // Negative Ausgabe,Weil "apple" Weniger als "banana"
?>
Die Bedeutung des Rückgabewerts von STRCMP lautet:
Weniger als 0: Die erste Zeichenfolge ist geringer als die zweite Zeichenfolge
Gleich 0: Zwei Saiten sind gleich
Größer als 0: Die erste Zeichenfolge ist größer als die zweite Zeichenfolge
Wenn es eine Zeichenfolge gibt, die zum Beispiel leer ist:
<?php
$str1 = "";
$str2 = "banana";
$result = strcmp($str1, $str2);
echo $result; // Negative Ausgabe
?>
Das Ergebnis ist immer noch negativ. Dies zeigt, dass STRCMP leere Zeichenfolgen korrekt verarbeiten kann und keine Fehler meldet. Aber die Frage ist - erwarten Sie einen solchen Vergleich?
Wenn viele Programmierer STRCMP verwenden, ist ihre tatsächliche Absicht festzustellen, ob die beiden "nicht leeren" Zeichenfolgen gleich sind. Wenn einer von ihnen leer ist, kann dies bedeuten, dass mit der Geschäftslogik etwas nicht stimmt. Wenn ein Benutzer beispielsweise einen Benutzernamen leer einreicht und der andere ein vorhandener Benutzername in der Datenbank ist, müssen Sie dann überprüfen, ob der Benutzername zuerst leer ist?
<?php
if ($str1 === "" || $str2 === "") {
echo "Mindestens eine Zeichenfolge ist leer,Kann nicht vergleichen。";
} else {
if (strcmp($str1, $str2) === 0) {
echo "Zwei Saiten sind gleich";
} else {
echo "Zwei Saiten sind unterschiedlich";
}
}
?>
Auf diese Weise können Sie logische Fehler vermeiden. Selbst wenn STRCMP selbst leere Zeichenfolgen verarbeiten kann, ist es sicherer , zuerst festzustellen, ob es sich aus einer geschäftlichen Sicht um eine leere Zeichenfolge handelt .
<?php
if ($str1 == $str2) {
echo "gleich";
}
?>
Obwohl dieses Schreiben einfacher ist, kann dies in einigen Fällen zu Problemen mit Typumwandlung führen, z. B.:
<?php
$str1 = 0;
$str2 = "a";
if ($str1 == $str2) {
echo "gleich"; // Ausgabe,Weil "a" Wird um konvertiert zu 0
}
?>
Daher wird empfohlen, STRCMP oder === anstelle loser Vergleiche zu verwenden.
<?php
function isValidUsername($input) {
$reserved = "admin";
if (trim($input) === "") {
return "Benutzername kann nicht leer sein";
}
if (strcmp($input, $reserved) === 0) {
return "Benutzername kann nicht reserviert werden";
}
return "Gültiger Benutzername";
}
echo isValidUsername(""); // Benutzername kann nicht leer sein
echo isValidUsername("admin"); // Benutzername kann nicht reserviert werden
echo isValidUsername("guest"); // Gültiger Benutzername
?>
Dieses Beispiel zeigt, wie man das leere Urteil mit STRCMP anmutig kombiniert, um Urteile zu fällen.
Beim Vergleich von Zeichenfolgen mit STRCMP wird die Funktion selbst keinen Fehler meldet, aber dies bedeutet nicht, dass Ihre Geschäftslogik korrekt ist. Vorgeschlagene Praktiken:
Bestimmen Sie zuerst, ob es sich um eine leere Zeichenfolge handelt , und machen Sie dann einen Vergleich.
Verwenden Sie TRIM () , um unnötige Whitespace zu löschen;
Vermeiden Sie die Typ -Konvertierungsprobleme, die durch die Verwendung loser Vergleiche ( == ) verursacht werden;
Ist es klar, dass der Kontext von String -Vergleiche und Wörterbuchreihenfolge? Ist es gleich? Ist es Fall sensibel?
Durch diese Methoden ist Ihre String -Vergleichslogik strenger und Sie können viele versteckte Fehler vermeiden. Wenn Sie in Szenarien wie der Verarbeitung von Benutzereingaben, URL -Parametern, Konfigurationswerten usw. auf Strcmp stoßen, können Sie diese Techniken verwenden, um die Code -Robustheit zu verbessern.
Referenzlink
PHP Offizielles Dokument: <Code> https://gitbox.net/manual/en/function.strcmp.php </code>