Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] if($id == "1") kontra switch
Forum PHP.pl > Forum > Przedszkole
piotrd
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?
tommy4
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
Balon
poczytaj w manualu i sie dowoiesz ze switch szybszy jest po prostu winksmiley.jpg
Cysiaczek
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.
piotrd
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.
siemakuba
zapomniałeś o ciapkach...
  1. <?php
  2. case 'als':
  3. // zamiast 
  4. case als:
  5. ?>


pozdr.
piotrd
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?
nasty
tak,
  1. <?php
  2. switch($_GET["id"][0]) {
  3. case "news":
  4. srobCos($_GET["id"][1]);
  5. break;
  6. }
  7. ?>
Gość
przepraszam ze sie wrtace, ale co to za funkcja srobCos?
mike
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 tongue.gif

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

Ja bym obstawiał explode 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. ?>
NetJaro
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.
Cysiaczek
Wydaje mi się, że zgubiliście wątek 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ę winksmiley.jpg
piotrd
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ę 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. ?>
Cysiaczek
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.
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.