Maison > développement back-end > tutoriel php > Pourquoi mon générateur de codes-barres PHP récursif renvoie-t-il parfois « Non défini » ?

Pourquoi mon générateur de codes-barres PHP récursif renvoie-t-il parfois « Non défini » ?

DDD
Libérer: 2024-12-20 21:12:12
original
320 Les gens l'ont consulté

Why Does My Recursive PHP Barcode Generator Sometimes Return

Comment gérer la récursion et la récupération des résultats en PHP

Question :

Pour générer des codes-barres uniques, une fonction récursive est utilisé pour garantir qu’il n’existe aucune entrée en double dans la base de données. Cependant, la fonction renvoie parfois « Non défini » au lieu d'un numéro unique. Déterminez la cause et fournissez un correctif pour le code défectueux ci-dessous :

function generate_barcode() {
    $barcode = rand(1, 10);
    $bquery = mysql_num_rows(mysql_query("SELECT * FROM stock_item WHERE barcode='$barcode'"));
    if ($bquery == 1)
        generate_barcode();
    else
        return $barcode;
}
Copier après la connexion

Réponse :

Le problème réside dans l'absence d'instruction return de l'appel récursif. Cela signifie que la fonction ne renvoie pas le numéro généré dans cette branche de la récursion, ce qui peut entraîner des erreurs « Non défini ».

Pour résoudre ce problème, modifiez l'appel récursif pour renvoyer le numéro généré :

function generate_barcode() {
    $barcode = rand(1, 10);
    $bquery = mysql_num_rows(mysql_query("SELECT * FROM stock_item WHERE barcode='$barcode'"));
    if ($bquery == 1)
        return generate_barcode(); // changed!
    else
        return $barcode;
}
Copier après la connexion

Considération supplémentaire :

Pour éviter une récursion infinie dans les cas où tous les numéros sont réservés, il est crucial de inclure une condition qui arrête la récursion et génère une erreur, telle que :

if ($recursiveCalls > 1000) // or any suitable limit
  throw new Exception('Failed to generate a unique barcode within the specified limit.');
Copier après la connexion

En incorporant ces modifications, la fonction renverra systématiquement des codes-barres uniques et gérera le cas extrême de tous les nombres pris.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal