Lors de la création de fonctions PHP pour générer des valeurs uniques, la récursivité peut être un outil utile. Dans cet exemple, l'objectif est de créer un code-barres aléatoire qui n'est pas déjà présent dans une colonne de base de données.
Un utilisateur a tenté d'implémenter cette fonctionnalité à l'aide d'une fonction récursive, mais rencontré un problème où la fonction renvoyait parfois « Non défini » au lieu d'un code-barres unique. Le code de l'utilisateur est le suivant :
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(); // original code } else { return $barcode; } }
Le problème avec le code d'origine est qu'il ne parvient pas à renvoyer le code-barres généré lorsque l'appel récursif est déclenché. Pour résoudre ce problème, l'instruction return doit également être ajoutée à l'appel récursif :
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(); // return added } else { return $barcode; } }
En incluant l'instruction return dans l'appel récursif, le code-barres généré est transmis dans la pile et finalement renvoyé par le appel de fonction initial.
Il est important de noter que les fonctions récursives peuvent avoir des limites de récursion. En PHP, il existe une limite de profondeur maximale pour la récursion qui, si elle est dépassée, générera une erreur. Pour éviter cela, il est recommandé d'incorporer une sorte de condition de sortie dans la fonction récursive, comme un nombre maximum de tentatives ou une vérification conditionnelle qui met fin à la récursion lorsque toutes les options possibles ont été épuisées.
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!