ホームページ >バックエンド開発 >PHPチュートリアル >再帰的 PHP バーコード ジェネレーターが時々「Not Set」を返すのはなぜですか?
質問:
一意のバーコードを生成するには、再帰関数を使用します。データベース内に重複したエントリが存在しないことを保証するために使用されます。ただし、この関数は、一意の数値の代わりに「Not Set」を返す場合があります。原因を特定し、以下の問題のあるコードを修正してください:
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; }
回答:
問題は、再帰呼び出しに return ステートメントがないことにあります。これは、関数が再帰のその分岐で生成された数値を返さないことを意味し、「Not Set」エラーが発生する可能性があります。
これを修正するには、生成された数値を返すように再帰呼び出しを変更します。
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; }
追加の考慮事項:
すべての数値が予約されている場合の無限再帰を防ぐには、次のようにします。次のような、再帰を停止してエラーを発生させる条件を含めることが重要です。
if ($recursiveCalls > 1000) // or any suitable limit throw new Exception('Failed to generate a unique barcode within the specified limit.');
これらの変更を組み込むことで、関数は一貫して一意のバーコードを返し、取得されるすべての数値のエッジ ケースを処理します。
以上が再帰的 PHP バーコード ジェネレーターが時々「Not Set」を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。