Position actuelle: Accueil> Derniers articles> Comment gérer les chaînes vides lors de l'utilisation de la fonction StrcMP

Comment gérer les chaînes vides lors de l'utilisation de la fonction StrcMP

gitbox 2025-05-29

Avant d'aller plus loin, jetons un coup d'œil à l'utilisation de base de STRCMP .

 <?php
$result = strcmp("apple", "banana");
echo $result; // Nombre négatif de sortie,parce que "apple" Moins que "banana"
?>

La signification de la valeur de retour de strcmp est:

  • Moins de 0: la première chaîne est inférieure à la deuxième chaîne

  • Égal à 0: deux chaînes sont égales

  • Supérieur à 0: la première chaîne est supérieure à la deuxième chaîne

La question se pose: que se passe-t-il lorsque la chaîne est vide?

S'il y a une chaîne vide, par exemple:

 <?php
$str1 = "";
$str2 = "banana";

$result = strcmp($str1, $str2);
echo $result; // Nombre négatif de sortie
?>

Le résultat est toujours négatif. Cela montre que STRCMP peut gérer correctement les chaînes vides et ne signalera pas les erreurs. Mais la question est - vous attendez-vous à une telle comparaison?

Lorsque de nombreux programmeurs utilisent STRCMP , leur intention réelle est de déterminer si les deux chaînes "non vides" sont les mêmes. Si l'un d'eux est vide, cela peut signifier qu'il y a quelque chose qui ne va pas avec la logique métier. Par exemple, si un utilisateur soumet un nom d'utilisateur vide et que l'autre est un nom d'utilisateur existant dans la base de données, avez-vous besoin de vérifier si le nom d'utilisateur est d'abord vide?

Correction de la façon de s'occuper: Déterminez d'abord si la chaîne est vide

 <?php
if ($str1 === "" || $str2 === "") {
    echo "Au moins une chaîne est vide,Impossible de comparer。";
} else {
    if (strcmp($str1, $str2) === 0) {
        echo "Deux cordes sont les mêmes";
    } else {
        echo "Deux cordes sont différentes";
    }
}
?>

De cette façon, vous pouvez éviter les erreurs logiques. Même si StrCMP lui-même peut gérer les chaînes vides, il sera plus sûr de déterminer d'abord s'il s'agit d'une chaîne vide d'un point de vue commercial.

Un autre malentendu commun: utilisez == pour comparer directement

 <?php
if ($str1 == $str2) {
    echo "égal";
}
?>

Bien que cette écriture soit plus simple, cela peut entraîner des problèmes de conversion dans certains cas, tels que:

 <?php
$str1 = 0;
$str2 = "a";

if ($str1 == $str2) {
    echo "égal"; // Sortir,parce que "a" Sera converti en 0
}
?>

Par conséquent, il est recommandé d'utiliser STRCMP ou === au lieu de comparaisons lâches.

Exemple: scénario de vérification des entrées utilisateur

 <?php
function isValidUsername($input) {
    $reserved = "admin";
    
    if (trim($input) === "") {
        return "Le nom d&#39;utilisateur ne peut pas être vide";
    }

    if (strcmp($input, $reserved) === 0) {
        return "Le nom d&#39;utilisateur ne peut pas être réservé";
    }

    return "Nom d&#39;utilisateur valide";
}

echo isValidUsername("");        // Le nom d&#39;utilisateur ne peut pas être vide
echo isValidUsername("admin");   // Le nom d&#39;utilisateur ne peut pas être réservé
echo isValidUsername("guest");   // Nom d&#39;utilisateur valide
?>

Cet exemple montre comment combiner gracieusement un jugement vide avec STRCMP pour faire des jugements.

résumé

Lorsque vous comparez les chaînes à l'aide de STRCMP , s'il y a une chaîne vide impliquée, la fonction elle-même ne rapportera pas une erreur, mais cela ne signifie pas que votre logique commerciale est correcte. Pratiques suggérées:

  1. Déterminez d'abord s'il s'agit d'une chaîne vide , puis faites une comparaison;

  2. Utilisez Trim () pour effacer les espaces blancs inutiles;

  3. Évitez les problèmes de conversion de type causés par l'utilisation de comparaisons lâches ( == );

  4. Est-il clair le contexte des comparaisons de cordes et est-ce l'ordre du dictionnaire? Est-ce égal? Est-ce que c'est sensible à la casse?

Grâce à ces méthodes, votre logique de comparaison de chaînes sera plus rigoureuse et vous pouvez éviter de nombreux bugs cachés. Si vous rencontrez STRCMP dans des scénarios tels que le traitement de l'entrée utilisateur, les paramètres d'URL, les valeurs de configuration, etc., vous pouvez utiliser ces techniques pour l'améliorer pour améliorer la robustesse du code.

Lien de référence