Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: return VS echo
Forum PHP.pl > Forum > Przedszkole
patigo
Witam mam taki mały problem, napisałem 2 funkcje z których jedna jest wywoływana wewnątrz drugiej:
  1. <?php
  2.  
  3. function MenuNowe($Id){
  4. $q = "SELECT * FROM dzialy WHERE Id=$Id ORDER BY sort ASC";
  5. $r = $this->q($q);
  6. while ($mn = mysql_fetch_array($r)){
  7. if ($mn[3]==0){
  8. return $mn[0];//TU!!!
  9. }else{
  10. $this->MenuNowe($mn[5]);
  11. }
  12. }
  13. }
  14.  function OstatnioDodane(){
  15. $q = "SELECT * FROM artykuly ORDER BY DataDodania DESC LIMIT 0,5";
  16. $r = $this->q($q);
  17. while ($tb = mysql_fetch_array($r)){
  18. $tytul = substr($tb[1], 0, 25);
  19. echo '<p class="MenuPrawe"><a href="index.php?IdArtykul='.$tb[0].'&amp;ID='.$this->MenuNowe($tb[3]).'&amp;IdDzial='.$tb[3].'" class="MenuPrawe">'.$tytul.'...</a></p>';
  20. }
  21. }
  22.  
  23. ?>

fragment kodu gdzie pisze //TU!!! stanowi problem ponieważ używając return tylko raz będzie zwrócona wartość pomimo tego że wywołanie tej funkcji nastąpi kilkukrotnie w pętli while, wpisując echo zostanie wyświetlone ale nie podstawione jako zmienna w adresie. Wcześniej mialem drugą funkcję zapisana tak:
  1. <?php
  2.  
  3.  function OstatnioDodane(){
  4. $q = "SELECT * FROM artykuly ORDER BY DataDodania DESC LIMIT 0,5";
  5. $r = $this->q($q);
  6. while ($tb = mysql_fetch_array($r)){
  7. $tytul = substr($tb[1], 0, 25);
  8. $ID = $this->MenuNowe($tb[3]);
  9. echo '<p class="MenuPrawe"><a href="index.php?IdArtykul='.$tb[0].'&amp;ID='.$ID.'&amp;IdDzial='.$tb[3].'" class="MenuPrawe">'.$tytul.'...</a></p>';
  10. }
  11.  
  12. }
  13. ?>
Radarek
Cytat(patigo @ 2005-12-15 16:39:44)
fragment kodu gdzie pisze //TU!!! stanowi problem ponieważ używając return tylko raz będzie zwrócona wartość pomimo tego że wywołanie tej funkcji nastąpi kilkukrotnie w pętli while, wpisując echo zostanie wyświetlone ale nie podstawione jako zmienna w adresie.

Mylisz sie. Wywolanie return nastepuje tylko raz. Po prostu return spowoduje zakonczenie fuknkcji i zwrocenie jakiejs wartosci. Niewazne czy wowujesz return w petli czy poza nia. Nie bardzo wiem co chcesz uzyskac, moge ci podpowiedziec tylko tyle:
-jesli chcesz przerwac petle, ale nie wychodzic z funkcji uzyj intrukcji break;
-jesli chcesz rozpoczac nastepna iteracje petli uzyj instrukcji continue;
-jesli chcesz zeby funkcja zwracala kilka wartosci to posluz sie tablica lub klasa.
qbuz
Dopisuj zwracane wartosci do zmiennej, a dopiero na koniec "returnuj" ta zmienna
patigo
chodzi o to że tylko jedna wartość ma być zwrócona,
dtb
i bedzie zwrocona jedna wartosc - pierwsza!
patigo
No ale jak pierwsza?? przecież zwrócenie wartości następuje dopiero po spełnieniu warunku, do którego dochodzi po wykonaniu się kilkukrotnym petli:
  1. <?php
  2. while ($mn = mysql_fetch_array($r)){
  3. if ($mn[3]==0){
  4.             return $mn[0];
  5.         }else{
  6.             $this->MenuNowe($mn[5]);
  7.         }
  8. }
  9. ?>
dtb
pierwsza - czytaj: pierwsza gdzie warunek zostanie spełniony
patigo
no i tylko raz może być spelniony przy 1 wywołaniu funkcji. Mam wrażenie że jakieś nieporozumienie tu zaszło...
Radarek
Cytat(patigo @ 2005-12-16 11:56:00)
no i tylko raz może być spelniony przy 1 wywołaniu funkcji. Mam wrażenie że jakieś nieporozumienie tu zaszło...

A ja mam wrazenie, ze albo nie wiesz jak dziala return, petle, warunki i podobne konstrukcje jezykowe w php, albo nie umiesz wyslowic sie z czym masz problem smile.gif. Powiedz jaki cel chcesz uzyskac, ale zrozumialem jezykiem.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.