ホームページ > バックエンド開発 > PHPチュートリアル > 再帰的な PHP 関数で注意深い return ステートメントの処理が必要なのはなぜですか?

再帰的な PHP 関数で注意深い return ステートメントの処理が必要なのはなぜですか?

Barbara Streisand
リリース: 2024-12-30 04:07:15
オリジナル
489 人が閲覧しました

Why Do Recursive PHP Functions Need Careful Return Statement Handling?

PHP 再帰関数での return ステートメントの利用

PHP では、再帰関数は反復計算のための強力なメカニズムを提供します。ただし、再帰関数を扱う場合、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) {
    generate_barcode();
  } else {
    return $barcode;
  }
}
ログイン後にコピー

分析

提供されたコード スニペットは、次の数値以外の値がある場合に正しく機能します。データベースの 1 ~ 4。ただし、1 から 4 までのすべての数値が占有されている場合、一意の数値を生成できないため、関数は無限に再帰的に実行されます。この問題を解決するには、関数は各再帰ステップで生成された数値を返す必要があります。

修正されたコード スニペット

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 generated number
  } else {
    return $barcode;
  }
}
ログイン後にコピー

各再帰ステップで生成された数値を返すことによってステップでは、関数は一意の番号が見つかるまで新しい番号を生成し続け、目的の機能を確保します。

以上が再帰的な PHP 関数で注意深い return ステートメントの処理が必要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート