Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> return VS echo, Funkcja wywoluje inną funkcję i...
patigo
post
Post #1





Grupa: Zarejestrowani
Postów: 132
Pomógł: 0
Dołączył: 4.02.2005

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Radarek
post
Post #2





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 23.05.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
qbuz
post
Post #3





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 4.02.2004

Ostrzeżenie: (0%)
-----


Dopisuj zwracane wartosci do zmiennej, a dopiero na koniec "returnuj" ta zmienna
Go to the top of the page
+Quote Post
patigo
post
Post #4





Grupa: Zarejestrowani
Postów: 132
Pomógł: 0
Dołączył: 4.02.2005

Ostrzeżenie: (0%)
-----


chodzi o to że tylko jedna wartość ma być zwrócona,
Go to the top of the page
+Quote Post
dtb
post
Post #5





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 5.11.2005
Skąd: Bieruń city

Ostrzeżenie: (0%)
-----


i bedzie zwrocona jedna wartosc - pierwsza!


--------------------
Go to the top of the page
+Quote Post
patigo
post
Post #6





Grupa: Zarejestrowani
Postów: 132
Pomógł: 0
Dołączył: 4.02.2005

Ostrzeżenie: (0%)
-----


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


Ten post edytował patigo 16.12.2005, 01:25:10
Go to the top of the page
+Quote Post
dtb
post
Post #7





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 5.11.2005
Skąd: Bieruń city

Ostrzeżenie: (0%)
-----


pierwsza - czytaj: pierwsza gdzie warunek zostanie spełniony


--------------------
Go to the top of the page
+Quote Post
patigo
post
Post #8





Grupa: Zarejestrowani
Postów: 132
Pomógł: 0
Dołączył: 4.02.2005

Ostrzeżenie: (0%)
-----


no i tylko raz może być spelniony przy 1 wywołaniu funkcji. Mam wrażenie że jakieś nieporozumienie tu zaszło...
Go to the top of the page
+Quote Post
Radarek
post
Post #9





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 23.05.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 08:09