Rumah >pembangunan bahagian belakang >tutorial php >Mengapa Penjana Kod Bar PHP Rekursif Saya Kadang-kadang Kembali 'Tidak Ditetapkan'?

Mengapa Penjana Kod Bar PHP Rekursif Saya Kadang-kadang Kembali 'Tidak Ditetapkan'?

DDD
DDDasal
2024-12-20 21:12:12217semak imbas

Why Does My Recursive PHP Barcode Generator Sometimes Return

Cara Mengendalikan Rekursi dan Pengambilan Keputusan dalam PHP

Soalan:

Untuk menjana kod bar unik, fungsi rekursif ialah digunakan untuk memastikan tiada entri pendua wujud dalam pangkalan data. Walau bagaimanapun, fungsi kadangkala mengembalikan "Tidak Ditetapkan" dan bukannya nombor unik. Tentukan punca dan berikan pembetulan untuk kod yang cacat di bawah:

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;
}

Jawapan:

Isunya terletak pada ketiadaan penyata pengembalian panggilan rekursif. Ini bermakna fungsi tidak mengembalikan nombor yang dijana dalam cawangan rekursi itu, yang berpotensi membawa kepada ralat "Tidak Ditetapkan".

Untuk membetulkannya, ubah suai panggilan rekursif untuk mengembalikan nombor yang dijana:

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;
}

Pertimbangan Tambahan:

Untuk mengelakkan pengulangan tak terhingga dalam kes di mana semua nombor adalah terpelihara, adalah penting untuk memasukkan syarat yang menghentikan pengulangan dan menimbulkan ralat, seperti:

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

Dengan memasukkan pengubahsuaian ini, fungsi akan secara konsisten mengembalikan kod bar unik dan mengendalikan kes tepi semua nombor diambil.

Atas ialah kandungan terperinci Mengapa Penjana Kod Bar PHP Rekursif Saya Kadang-kadang Kembali 'Tidak Ditetapkan'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn