Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]if czy switch?
Forum PHP.pl > Forum > Przedszkole
Rookie
Witam,
pytanie: Co jest wydajniejsze, wygodniejsze, szybsze, ogólnie lepsze?

if:
  1. <?php
  2. if (isset($_SESSION[layout])){
  3. if ($_SESSION[layout] == 'lato') $styl='style.css';
  4. elseif ($_SESSION[layout] == 'jesien') $styl='style_jesien.css';
  5. elseif ($_SESSION[layout] == 'zima') $styl='style_zima.css';
  6. elseif ($_SESSION[layout] == 'wiosna') $styl='style_wiosna.css';
  7. elseif ($_SESSION[layout] == 'red') $styl='style_red.css';
  8. elseif ($_SESSION[layout] == 'zolty') $styl='style_zolty.css';
  9. elseif ($_SESSION[layout] == 'green') $styl='style_green.css';
  10. else $styl='style.css';
  11. } else $styl='style.css';
  12. ?>


Czy switch:

  1. <?php
  2. if (isset($_SESSION[layout])){
  3. switch ($_SESSION[layout]) {
  4. case 'wiosna':
  5. case 'lato':
  6. case 'jesien':
  7. case 'zima':
  8. case 'red':
  9. case 'zolty':
  10. case 'green':
  11. $styl="style_$_SESSION[layout].css";
  12. break;
  13. default: $styl="style_lato.css";
  14. }
  15. } else $styl='style_lato.css';
  16. ?>

questionmark.gif

Oba kody jak widać wykonują dokładnie to samo, różnica tylko w zapisie.
Tak samo 2x3 i 3x2 - Różnica w zapisie a wynik ten sam (6).
zzeus
wydajniejsze jest switch, dla mnie też jest czytelniejsze
Rookie
Też mi się tak wydawało ale wolałem zapytać ;p
Dzięki
Pozdrawiam.
Fifi209
Wrzuć te nazwy do tablicy i potem in_array i będziesz miał, krótki i zarazem wydajny kod...
Sekwer
Switch jest wolniejszy od if, ale to są milisekundy.
Ja używam switch, kiedy jest to możliwe, ze względy na większą czytelność kodu.
Fifi209
Cytat(Sekwer @ 28.08.2009, 15:07:49 ) *
Switch jest wolniejszy od if, ale to są milisekundy.

Przy dużym obciążeniu to jest różnica. winksmiley.jpg

Cytat(Sekwer @ 28.08.2009, 15:07:49 ) *
Ja używam switch, kiedy jest to możliwe, ze względy na większą czytelność kodu.

Nie zawsze, poza tym nie można popadać ze skrajności w skrajność i wszędzie switche pchać... winksmiley.jpg

W tym przypadku najlepiej skorzystać z pomysłu, który ja zaproponowałem...
Rookie
fifi, to miałoby wyglądać tak?:
  1. <?php
  2. $layout=array('wiosna','lato','jesien','zima','red','zolty','green');
  3. if(in_array($_SESSION[layout], $layout)) {
  4. $style="style_$_SESSION[layout].css";
  5. } else {
  6. $style='style_lato.css';
  7. }
  8. ?>

questionmark.gif
Pytam się dla pewności, zaraz spróbuję bo mi to logicznie i dość sensownie wygląda, zamiast 16 linijek jest 6 oszczędność 10-ciu
Fifi209
Tak dokładnie tak. winksmiley.jpg
I masz o wiele czytelniejszy kod. ;p

  1. $style="style_$_SESSION[layout].css";


Najlepiej
  1. $style='style_'.$_SESSION['layout'].'.css';
Rookie
Co prawda tematem wątku nie było, żeby mi ktoś pomagał w optymalizacji tylko powiedział swoje zdanie co do switch i if, ale skoro już tak wyszło, to będę miał czytelniejszy kod więc nie ma wątpliwości co do tego, że "pomógł" ci się należy biggrin.gif
EDIT: Coś jest jednak nie tak
nie chce mi pokazać zmiennej style
Spróbuję się z tym uporać i napiszę co było nie tak, więc jak jakiś mod się trafi to niech póki co nie zamyka
EDIT2: Sorka mój błąd zmienna miała nazywać się styl a nie style <lol2> haha.gif
Tak więc jest wszystko ok i można zamknąć
alegorn
Cytat(Sekwer @ 28.08.2009, 16:07:49 ) *
Switch jest wolniejszy od if, ale to są milisekundy.
Ja używam switch, kiedy jest to możliwe, ze względy na większą czytelność kodu.


hmm - mi w testach kiedys cos przeciwnego wykazalo (i to znaczne roznice)
oczywiscie przy rozbudowanej, nie trywialnej formie.

co zresta jest dla mnie logiczne, gdyz w case warunek jest sprawdzany tylko raz,
przy if'ach warunek ten jest przetwarzany co krok.. (no moze poza else)

mozesz to poprzec odpowiednim przykladem ? (ze switch jest wolniejszy.. ?)
nie pytam by cie sprawdzic, ot, z czystej ciekawosci, gdyz jesli jest tka jak piszesz - musialbym zrewidowac wlasne informacje biggrin.gif

j.
Sekwer
Przy tysiącu prób warunki if/else wykonały się w 2 milisekundy a switch/case 3 milisekundy

Szybkość mogą się znacznie różnić w zależności od tego ile i jakie warunki mamy.
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.