Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]if czy switch?
Rookie
post
Post #1





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 1.03.2008
Skąd: Olsztyn

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


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

(IMG:style_emoticons/default/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).

Ten post edytował Rookie 28.08.2009, 14:53:30
Go to the top of the page
+Quote Post
zzeus
post
Post #2





Grupa: Zarejestrowani
Postów: 441
Pomógł: 71
Dołączył: 3.09.2007
Skąd: wrocław

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


wydajniejsze jest switch, dla mnie też jest czytelniejsze
Go to the top of the page
+Quote Post
Rookie
post
Post #3





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 1.03.2008
Skąd: Olsztyn

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


Też mi się tak wydawało ale wolałem zapytać ;p
Dzięki
Pozdrawiam.
Go to the top of the page
+Quote Post
Fifi209
post
Post #4





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Wrzuć te nazwy do tablicy i potem in_array i będziesz miał, krótki i zarazem wydajny kod...
Go to the top of the page
+Quote Post
Sekwer
post
Post #5





Grupa: Zarejestrowani
Postów: 36
Pomógł: 2
Dołączył: 18.01.2009

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


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





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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. (IMG:style_emoticons/default/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ć... (IMG:style_emoticons/default/winksmiley.jpg)

W tym przypadku najlepiej skorzystać z pomysłu, który ja zaproponowałem...
Go to the top of the page
+Quote Post
Rookie
post
Post #7





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 1.03.2008
Skąd: Olsztyn

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


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

(IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
Fifi209
post
Post #8





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Tak dokładnie tak. (IMG:style_emoticons/default/winksmiley.jpg)
I masz o wiele czytelniejszy kod. ;p

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


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


Ten post edytował fifi209 28.08.2009, 15:28:37
Go to the top of the page
+Quote Post
Rookie
post
Post #9





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 1.03.2008
Skąd: Olsztyn

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


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 (IMG:style_emoticons/default/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> (IMG:style_emoticons/default/haha.gif)
Tak więc jest wszystko ok i można zamknąć

Ten post edytował Rookie 28.08.2009, 15:41:11
Go to the top of the page
+Quote Post
alegorn
post
Post #10





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

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


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 (IMG:style_emoticons/default/biggrin.gif)

j.
Go to the top of the page
+Quote Post
Sekwer
post
Post #11





Grupa: Zarejestrowani
Postów: 36
Pomógł: 2
Dołączył: 18.01.2009

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


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

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

 



RSS Aktualny czas: 23.08.2025 - 05:24