Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Instrukcja if / elseif w funkcji
Forum PHP.pl > Forum > Przedszkole
red9skull
Ta funkcja działa:
  1. function resize()
  2. {
  3. $x = $this->getWidth();
  4. $y = $this->getHeight();
  5.  
  6. if($this->rodzaj == "pionowy")
  7. {
  8. $width = 90;
  9. $radio = $x / $width;
  10.  
  11. if($radio < 0)
  12. {
  13. $height = $y * $radio;
  14. $height = (int)$height;
  15. }
  16. elseif($radio > 0)
  17. {
  18. $height = $y / $radio;
  19. $height = (int)$height;
  20. }
  21.  
  22. $new_image = imagecreatetruecolor($width, $height);
  23. imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
  24. $this->image = $new_image;
  25. }
  26. elseif($this->rodzaj == "poziomy")
  27. {
  28. $height = 90;
  29. $radio = $y / $height;
  30.  
  31. if($radio < 0)
  32. {
  33. $width = $x * $radio;
  34. $width = (int)$width;
  35. }
  36. elseif($radio > 0)
  37. {
  38. $width = $x / $radio;
  39. $width = (int)$width;
  40. }
  41.  
  42. $new_image = imagecreatetruecolor($width, $height);
  43. imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
  44. $this->image = $new_image;
  45. }
  46. }


Natomiast ta nie:
  1. function resize()
  2. {
  3. $x = $this->getWidth();
  4. $y = $this->getHeight();
  5.  
  6. if($this->rodzaj == "pionowy")
  7. {
  8. $width = 90;
  9. $radio = $x / $width;
  10.  
  11. if($radio < 0)
  12. {
  13. $height = $y * $radio;
  14. $height = (int)$height;
  15. }
  16. elseif($radio > 0)
  17. {
  18. $height = $y / $radio;
  19. $height = (int)$height;
  20. }
  21. }
  22. elseif($this->rodzaj == "poziomy")
  23. {
  24. $height = 90;
  25. $radio = $y / $height;
  26.  
  27. if($radio < 0)
  28. {
  29. $width = $x * $radio;
  30. $width = (int)$width;
  31. }
  32. elseif($radio > 0)
  33. {
  34. $width = $x / $radio;
  35. $width = (int)$width;
  36. }
  37. }
  38.  
  39. $new_image = imagecreatetruecolor($width, $height);
  40. imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
  41. $this->image = $new_image;
  42. }


Kod jest mój i stąd pytanie: czemu muszę dodawać 2 razy ten fragment:
  1. $new_image = imagecreatetruecolor($width, $height);
  2. imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
  3. $this->image = $new_image;

A nie jeden tak jak w drugim przykładzie?
Zyx
Miło byłoby, gdybyś jeszcze napisał, czym objawia się "niedziałanie". Obstawiam, że pole "rodzaj" ma inną wartość, niż "pionowy" oraz "poziomy", przez co w drugim wariancie funkcji "wspólny" kod próbuje korzystać ze zmiennych, które nie powstały.

Ponadto masz następujące błędy i niedoróbki:

1. Nie lepiej rodzaj oznaczać liczbami i dozwolone stany opisać stałymi? Tekst w takim wypadku to bardzo niewydajna i podatna na błędy forma definiowania.
2. Nie uwzględniasz sytuacji, gdy ratio (bo radio to do słuchania jest) wynosi równe 0. Wprawdzie w obliczeniach zmiennoprzecinkowych ciężko jest tak precyzyjnie trafić, ale nie możesz tego nigdy wykluczyć, bo jeśli się trafi, Twoja funkcja skalująca nie stworzy zmiennej $height. Polecam Ci po prostu zastąpić elseif przez else.
red9skull
Cytat(Zyx @ 20.06.2010, 17:43:02 ) *
Miło byłoby, gdybyś jeszcze napisał, czym objawia się "niedziałanie".

Zmienne $width, $height nie istnieją.
Cytat(Zyx @ 20.06.2010, 17:43:02 ) *
ratio (bo radio to do słuchania jest)

Ups smile.gif

Btw:
Kod
function proporcje()
   {
       $x = $this->getWidth();
    $y = $this->getHeight();
    
    if($x - $y < 0)
    {
        $this->rodzaj = "pionowy";
    }
    elseif($x - $y > 0)
    {
        $this->rodzaj = "poziomy";
    }
   }


Rozwiązałem problem: zdjęcia były KWADRATOWE biggrin.gif
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.