Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Niedziałający return.
Forum PHP.pl > Forum > Przedszkole
krzywy36
  1. <?php
  2. function reSize($width, $height)
  3. {
  4. if($width > 640 OR $height > 480)
  5. {
  6. if($width > $height AND $width > 640)
  7. {
  8. $height = ($height * 640)/$width;
  9. $width = 640;
  10. }
  11. elseif($width > $height AND $height > 480)
  12. {
  13. $width = ($width * 480)/$height;
  14. $height = 480;
  15. }
  16. reSize($width, $height);
  17. }
  18. else
  19. {
  20. return $width;
  21. }
  22. }
  23.  
  24. $zmienna = reSize(720, 576);
  25.  
  26. echo $zmienna;
  27. ?>


funkcja nic nie zwraca. Jeśli nad return wpisze echo $width; to wyświetla prawidłowo, więc skrypt przechodzi do tego else ale return coś nie chce działać, ktoś widzi gdzie jest bląd?
pedro84
Usuń else, bo przecież chcesz, żeby zawsze zwracało Ci $width, prawda?

Kod powinien wyglądac tak:
  1. <?php
  2. function reSize($width, $height)
  3. {
  4. if($width > 640 OR $height > 480)
  5. {
  6. if($width > $height AND $width > 640)
  7. {
  8. $height = ($height * 640)/$width;
  9. $width = 640;
  10. }
  11. elseif($width > $height AND $height > 480)
  12. {
  13. $width = ($width * 480)/$height;
  14. $height = 480;
  15. }
  16. reSize($width, $height);
  17. }
  18. return $width;
  19. }
  20.  
  21. $zmienna = reSize(720, 576);
  22.  
  23. echo $zmienna;
  24. ?>
  25.  
krzywy36
tylko, że w tym kodzie $width zwróci się nawet jeśli będzie większe od 640 a ma się zwrócić dopiero jeśli warunki będą spełnione.
Generalnie ma tam zwracać tablice składającą się z $wdth i $height ale dla uproszczenia kodu niech narazie zwraca samo $width.
Chodzi o to że w kodzie który podałeś jest zwracane $width = 640; a ma być zwracane $width = 600 czyli dopiero po kolejnym wywołaniu funckji.
Jakieś pomysły?

Edit: dam jeszcze przykład:
  1. <?php
  2. function reSize($width, $height)
  3. {
  4. if($width > 640 OR $height > 480)
  5. {
  6. if($width > $height AND $width > 640)
  7. {
  8. $height = ($height * 640)/$width;
  9. $width = 640;
  10. }
  11. elseif($width > $height AND $height > 480)
  12. {
  13. $width = ($width * 480)/$height;
  14. $height = 480;
  15. }
  16. reSize($width, $height);
  17. }
  18. else
  19. {
  20. $size = array($width, $height);
  21. print_r($size);
  22. return $width;
  23. }
  24. }
  25.  
  26. $zmienna = reSize(720, 576);
  27.  
  28. echo $zmienna;
  29. ?>


ten kod drukuje tablice z prawidłowymi danymi (600, 480) ale nie zwraca nic ;/
pedro84
Teraz łapię.

Zobacz, zwracasz $width dopiero po else, widzisz? Nie zwracasz zmiennej wcześniej, czyli Twój drugi przykład powinien wyglądać tak:
  1. <?php
  2. function reSize($width, $height)
  3. {
  4. if($width > 640 OR $height > 480)
  5. {
  6. if($width > $height AND $width > 640)
  7. {
  8. $height = ($height * 640)/$width;
  9. $width = 640;
  10. }
  11. elseif($width > $height AND $height > 480)
  12. {
  13. $width = ($width * 480)/$height;
  14. $height = 480;
  15. }
  16. reSize($width, $height);
  17. return $width;
  18. }
  19. else
  20. {
  21. $size = array($width, $height);
  22. print_r($size);
  23. return $width;
  24. }
  25. }
  26.  
  27. $zmienna = reSize(720, 576);
  28.  
  29. echo $zmienna;
  30. ?>
  31.  
krzywy36
fakt, zwraca ale ciągle 640 ;/ ten else jest właśnie po to, żeby nie zwracało dopóki nie będzie mniej niz 640, czyli ciągle nie działa :<
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.