Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Niedziałający return.
krzywy36
post
Post #1





Grupa: Zarejestrowani
Postów: 370
Pomógł: 43
Dołączył: 1.12.2007
Skąd: Kędzierzyn Koźle

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


  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?


--------------------
pretty as a shit.
Go to the top of the page
+Quote Post
pedro84
post
Post #2





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


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.  


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post
krzywy36
post
Post #3





Grupa: Zarejestrowani
Postów: 370
Pomógł: 43
Dołączył: 1.12.2007
Skąd: Kędzierzyn Koźle

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


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 ;/

Ten post edytował krzywy36 25.04.2010, 13:55:21


--------------------
pretty as a shit.
Go to the top of the page
+Quote Post
pedro84
post
Post #4





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


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.  


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post
krzywy36
post
Post #5





Grupa: Zarejestrowani
Postów: 370
Pomógł: 43
Dołączył: 1.12.2007
Skąd: Kędzierzyn Koźle

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


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 :<


--------------------
pretty as a shit.
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: 19.08.2025 - 13:08