Forum FAQForum FAQSearchSearch MemberlistMemberlist Forum ignore listForum ignore list RegisterRegister ProfileProfile Log in to check your private messagesLog in to check your private messages Log inLog in
return iz rekurzivne funkcije ??

 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    mi3dot.org Forum Index -> Server-side
View previous topic :: View next topic  
Author Message
PaNtHeR



Joined: 17 Sep 2003
Posts: 161

PostPosted: 24.09.2007 13:42    Post subject: return iz rekurzivne funkcije ?? Add user to your forum ignore list Reply with quote

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 ... Shocked Shocked

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. QuestionQuestion

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 Smile
Back to top
View user's profile Send private message Send e-mail
Sulien



Joined: 04 Jan 2004
Posts: 2905
Location: Zagreb

PostPosted: 25.09.2007 02:36    Post subject: Add user to your forum ignore list Reply with quote

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 ... Smile
Back to top
View user's profile Send private message Send e-mail Visit poster's website
PaNtHeR



Joined: 17 Sep 2003
Posts: 161

PostPosted: 25.09.2007 12:43    Post subject: Add user to your forum ignore list Reply with quote

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 Wink hvala... to ti je kad radiš nešto nabrzinu Shocked Shocked

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 Smile

Još jednom hvala.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    mi3dot.org Forum Index -> Server-side All times are GMT + 1 Hour
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group