Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] if($id == "1") kontra switch
piotrd
post 9.07.2006, 19:04:53
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?


--------------------
piotrd
Go to the top of the page
+Quote Post
tommy4
post 9.07.2006, 19:10:03
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 9.07.2006, 19:21:23
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 winksmiley.jpg


--------------------
Postura wielka i morda wredna, jestem Balon, kozak z osiedla !
bzdury.pl - Królestwo rozrywki
Go to the top of the page
+Quote Post
Cysiaczek
post 10.07.2006, 07:54:02
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.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
piotrd
post 10.07.2006, 09:57:16
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


--------------------
piotrd
Go to the top of the page
+Quote Post
siemakuba
post 10.07.2006, 10:06:48
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 10.07.2006, 11:07:01
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?


--------------------
piotrd
Go to the top of the page
+Quote Post
nasty
post 10.07.2006, 11:12:33
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 10.07.2006, 16:07:10
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 10.07.2006, 17:05:16
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 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 10.07.2006, 18:46:18
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 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 10.07.2006, 19:01:19
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 11.07.2006, 05:47:54
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 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


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
piotrd
post 11.07.2006, 06:55:43
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ę 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. ?>


--------------------
piotrd
Go to the top of the page
+Quote Post
Cysiaczek
post 11.07.2006, 06:59:49
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.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 04:12