View previous topic :: View next topic |
Author |
Message |
PaNtHeR
Joined: 17 Sep 2003 Posts: 161
|
Posted: 24.09.2007 14:42 Post subject: return iz rekurzivne funkcije ?? |
|
|
Nešto mi se čudno dešava u skripti... nikad prije nisam zamijetio ovakvo ponašanje ..
Dakle imam tree strukturu kategorija na sajtu i getGrandParent funkciju koja mi pronalazi glavnu kategoriju u kojoj je određena stranica... sve je ok kada koristim echo ali ta vrijednost se ne vraća putem return odmah liniju ispod ...
Code: | <?php
include("includes/Database.php");
function getGrandParent ($kategorija) {
//u slučaju prazne $kategorija
echo 'kategorija='.$kategorija." ";
if ($kategorija == "") {
return "0";
}
$baza = new Database();
//selektira parent zadane kategorije
$sql = "SELECT parent FROM _pages WHERE id=$kategorija";
$row = $baza->makeQueryRow($sql);
//dokle god ne dođe da je parent 0 poziva samu sebe i trazi roditelje
echo ("parent=".$row->parent."<br>");
if ($row->parent == "0") {
// tu je problem
echo 'kategorija_kraj='.$kategorija.'<br>';
return $kategorija;
} else {
getGrandParent($row->parent);
}
}
?>
<?php echo ("izlaz=".getGrandParent("20")."<br>"); ?> |
Van dobijem ovo:
kategorija=20 parent=13
kategorija=13 parent=0
kategorija_kraj=13
izlaz=
A po svim pravilima bi trebao dobiti "izlaz=13" jer ga odmah nakon boldane linije šaljem van s returnom.
niš mi nije jasno ali mislim da je razlog jer je funkcija rekurzivna pa je možda netko naletio na isti problem. E sad mogao bih ja koristiti echo unutar funkcije i zaboravit na problem ali na jednom drugom mjestu mi takvo ponašanje ne odgovara pa baš moram koristiti return i hoću koristit return jer jednostavno hoću |
|
|
Back to top |
|
|
Sulien
Joined: 04 Jan 2004 Posts: 2905 Location: Zagreb
|
Posted: 25.09.2007 03:36 Post subject: |
|
|
Ne razumiješ rekurziju.
Funkcija poziva samu sebe, što znači da svi pozivi same sebe vraćaju vrijednost unutar te funkcije (samo na drugom nivou), a samo prvi poziv (originalni) vraća vrijednost natrag u glavni program.
Rješenje je:
Code: | ...
return getGrandParent($row->parent);
... |
Dakle falija si return.
BTW, jel ja to vidim da otvaraš novi db connection za svaki rekurzivni poziv?? Stari moj ... |
|
|
Back to top |
|
|
PaNtHeR
Joined: 17 Sep 2003 Posts: 161
|
Posted: 25.09.2007 13:43 Post subject: |
|
|
ej hvala.. probat ću kasnije najverojatnije je to rješenje.
Quote: | BTW, jel ja to vidim da otvaraš novi db connection za svaki rekurzivni poziv?? Stari moj ... Smile |
he he, u jbg.. da.. pomaknut ću to van funkcije, malo višlje hvala... to ti je kad radiš nešto nabrzinu
inače je ta funkcija bila unutar klase pa sam connection otvarao pri instanciranju objekta.. ovdje mi ne treba cijela klasa pa sam valjda pri chupanju mislio da je baš tu zgodno skonektirat se
Još jednom hvala. |
|
|
Back to top |
|
|
|