Maison >développement back-end >tutoriel php >Pourquoi ma fonction PHP récursive renvoie-t-elle parfois « Non défini » au lieu d'un code-barres unique ?
Utiliser Return dans les fonctions récursives en PHP
En PHP, les fonctions récursives peuvent être un outil puissant pour résoudre des problèmes complexes. Lors de l'écriture de fonctions récursives, il est crucial d'utiliser correctement l'instruction return pour garantir une logique correcte et éviter les boucles infinies.
Un cas où une telle utilisation est généralement négligée est lors de la génération de valeurs uniques, comme illustré dans le scénario suivant :
Question :
Le but est de générer des codes-barres aléatoires qui ne sont pas déjà présents dans une colonne de base de données. La fonction utilise la récursion pour générer des nombres à plusieurs reprises jusqu'à ce qu'un nombre unique soit trouvé. Cependant, la fonction renvoie parfois « Non défini » au lieu de produire un numéro unique.
Code :
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; } }
Réponse :
Le problème dans le code fourni réside dans l'appel récursif. Pour garantir que la fonction renvoie correctement un numéro unique, le numéro nouvellement généré doit être renvoyé par l'appel récursif lui-même :
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(); // updated } else { return $barcode; } }
En renvoyant le numéro généré par l'appel récursif, la fonction garantit que l'appelant reçoit le numéro unique.
Considérations supplémentaires :
Il est essentiel d'inclure une condition de sortie pour le cas où tous les nombres sont pris. S'il n'y a pas une telle condition, la fonction s'appellera de manière récursive jusqu'à ce que la limite de récursion PHP soit atteinte, provoquant une erreur.
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!