Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] if($id == "1") kontra switch
piotrd
post
Post #1





Grupa: Zarejestrowani
Postów: 174
Pomógł: 0
Dołączył: 16.05.2006
Skąd: Łódź

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


Zastanawiam się nad tym czy mój sposób jest dobry, gdyż moja strona zbudowana jest na zasadzie poniższego kodu:

  1. <?php
  2. if($id == "1") { echo 'jakaś treść'; }
  3. elseif($id == "2") { echo 'bla bla'; }
  4. elseif($id == "3") { echo 'abrakadabra'; }
  5. else { echo 'abrakadabra'; }
  6. ?>


podczas gdy inni (jak wynika z forum) uzywaja funkcji switch.

  1. <?php
  2. switch( $_GET[ 'id' ] )
  3. {
  4. default:
  5. case 1: echo 'jakaś treść';
  6. break;
  7.  
  8. case 2: echo 'bla bla';
  9. break;
  10.  
  11. case 3: echo 'abrakadabra';
  12. break;
  13. }
  14. ?>


Generalnie nie widzę różnicy i wydaje mi się, że oba rozwiązania są dobre... co o tym sądzicie?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
tommy4
post
Post #2





Grupa: Zarejestrowani
Postów: 288
Pomógł: 12
Dołączył: 2.12.2005

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


switch chyba lepsze;d, tak mi sie to kojarzy, bo lepsze na pewno w C++ byloby w takim przypadku, wiec dla php mowie to samo. ;d Ale brakuje tu sprawdzenia $id, nie wiem dlaczego default masz na początku, ja bym to zrobil tak:

  1. <?php
  2. switch( $_GET[ 'id' ] )
  3. {
  4. case 1: echo 'jakaś treść';
  5. break;
  6.  
  7. case 2: echo 'bla bla';
  8. break;
  9.  
  10. case 3: echo 'abrakadabra';
  11. break;
  12. default: echo 'zly id';
  13. break;
  14. }
  15. ?>

nie pamietam juz czy tam ma byc break w tym default, jeden kit;d
Go to the top of the page
+Quote Post
Balon
post
Post #3





Grupa: Zarejestrowani
Postów: 422
Pomógł: 0
Dołączył: 14.12.2005
Skąd: Wałbrzych

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


poczytaj w manualu i sie dowoiesz ze switch szybszy jest po prostu (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #4





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Wszystko zależy od okoliczności. Jeśli masz tylko dwie możliwości i te dwie możliwości zawsze będą tylko dwie, to switch jest bez sensu.
Jeśłi planujesz, ewentualnie nie jesteś pewien, czy pojawi się więcej sposobów reakcji na wartość, to faktycznie switch jest dużo lepszy od if else.
Trzeba po prostu umieć wyważyć taki kod i wybrać, co lepsze.
Go to the top of the page
+Quote Post
piotrd
post
Post #5





Grupa: Zarejestrowani
Postów: 174
Pomógł: 0
Dołączył: 16.05.2006
Skąd: Łódź

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


dałem na próbę
  1. <?php
  2. switch( $_GET[ 'id' ] ) {
  3. case als: include ("$path/als.php");
  4. break;
  5. case bls: include ("$path/bls.php");
  6. break;
  7. case ils: include ("$path/ils.php");
  8. break;
  9. default: include ("$path/index2.php");
  10. break;
  11. }
  12. ?>

i zawartość index2.php wyświetla się nad wybranym switchem.

Ten post edytował piotrd 10.07.2006, 09:58:08
Go to the top of the page
+Quote Post
siemakuba
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


zapomniałeś o ciapkach...
  1. <?php
  2. case 'als':
  3. // zamiast 
  4. case als:
  5. ?>


pozdr.
Go to the top of the page
+Quote Post
piotrd
post
Post #7





Grupa: Zarejestrowani
Postów: 174
Pomógł: 0
Dołączył: 16.05.2006
Skąd: Łódź

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


Cytat(Cysiaczek @ 10.07.2006, 08:54 ) *
Jeśłi planujesz, ewentualnie nie jesteś pewien, czy pojawi się więcej sposobów reakcji na wartość, to faktycznie switch jest dużo lepszy od if else.

czy za pomocą funkcji switch mozna osiągnąć dziłanie polegające na stworzeniu piętrowej struktury którą można wydobyć za pomoca np: index.php?id=news&id=treść_nr8 bo tego w manualu nie ma?
Go to the top of the page
+Quote Post
nasty
post
Post #8





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


tak,
  1. <?php
  2. switch($_GET["id"][0]) {
  3. case "news":
  4. srobCos($_GET["id"][1]);
  5. break;
  6. }
  7. ?>


Ten post edytował nasty_psycho 10.07.2006, 11:13:12
Go to the top of the page
+Quote Post
-Gość-
post
Post #9





Goście







przepraszam ze sie wrtace, ale co to za funkcja srobCos?
Go to the top of the page
+Quote Post
mike
post
Post #10





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


To miało być tak:
  1. <?php
  2. switch($_GET["id"][0]) {
  3. case "news":
  4. zróbCo&#347;($_GET["id"][1]);
  5. break;
  6. }
  7. ?>

Jak widzisz nie każdy dba o dobry poziom czytelności swoich wypowiedzi (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Ale jedno i tak mnie zastanawia.
Skąd to $_GET["id"] jest tablicą?
Go to the top of the page
+Quote Post
Ludvik
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Cytat
Ale jedno i tak mnie zastanawia.
Skąd to $_GET["id"] jest tablicą?

Ja bym obstawiał explode (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) A tak na prawdę to raczej nie da się zrobić czegoś takiego, jak chciał piotrd. Z resztą po co kombinować, skoro można po ludzku nazwać zmienne.

Wracając do tematu, niektórzy robią to tak
  1. <?php
  2. $txt = array(1 => 'txt1', 2 => 'txt2', 3 => 'txt3');
  3. if (isset($txt[$id])) {
  4. echo $txt[$id];
  5. } else {
  6. echo 'default';
  7. }
  8. ?>
Go to the top of the page
+Quote Post
NetJaro
post
Post #12





Grupa: Zarejestrowani
Postów: 475
Pomógł: 0
Dołączył: 1.04.2005
Skąd: Warszawa

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


Ja osobiście używam instrukcji warunkowej if do max. 3 warunków (z elseif). Powyżej 3 warunków często stosuje switch, jednak nie ma jednokładnej reguły kiedy stosować switch/if - to zależy w jaki sposób.
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #13





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Wydaje mi się, że zgubiliście wątek (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
@piotrd - stusując switch możesz sobie, tak ja pokazałeś includować pliki zawierające jakieś dane, skrypty etc. Jest to rozwiązanie często stosowane, ale jeśli chcesz osiągnąć mocno zagnieżdżone switch do tego, co myślę, to uważaj, bo to może się zemścić! Kidyś tak zrobiłem i do dzisiaj żałuję (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
piotrd
post
Post #14





Grupa: Zarejestrowani
Postów: 174
Pomógł: 0
Dołączył: 16.05.2006
Skąd: Łódź

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


Cytat(Cysiaczek @ 11.07.2006, 06:47 ) *
jeśli chcesz osiągnąć mocno zagnieżdżone switch do tego, co myślę, to uważaj, bo to może się zemścić! Kidyś tak zrobiłem i do dzisiaj żałuję (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

czyżbym zagnieżdżając switche tracił na bezpieczeństwie?
jestem przekonany do słuszności stosowania poniższego rozwiązania:
  1. <?php
  2. $path = ".";
  3. switch( $_GET[ 'id' ] ) {
  4. case 'als': include ("$path/als.php");
  5. break;
  6. default: include ("$path/index2.php");
  7. break;
  8. }
  9. ?>
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #15





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Nie chodzi o bezpieczeństwo, ale o założenie projektowe, które w wypadku użycia takiej konstrukcji <na sztywno> jest dobre tylko dla mniejszych projektów. Przy wiekszych switch, który będzie zarządzał akcjami aplikacji to pomyłka.
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: 24.08.2025 - 22:46