Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Instrukcja switch - obsługa and?
Początkujący
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 7.08.2010

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


Mam taki kod:
  1. <?php
  2. $godzina==125;
  3. switch ($godzina) {
  4. case "$godzina>0 and $godzina<14";
  5. echo "Dzień dobry!";
  6. break;
  7. case "$godzina>=14 and $godzina<18";
  8. echo "Dobrego popołudnia";
  9. break;
  10. case "$godzina>=18 and $godzina<=24";
  11. echo "dobry wieczór";
  12. break;
  13. default:
  14. echo "Ta godzina to zła godzina";
  15. }
  16.  
  17. ?>

No i niestety, gdy go skompiluję, wyświetla mi się kod: Dzień dobry, pomimo tego, że $godzina=125.
Co zrobiłem źle z tym kodem? A moze instrukcja switch nie obsługuje polecenia and?

Ten post edytował Początkujący 27.08.2010, 15:15:06
Go to the top of the page
+Quote Post
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Do manuala
http://pl2.php.net/manual/en/control-structures.switch.php
http://pl2.php.net/manual/en/control-structures.if.php

Bo to co masz wynika z twoich braków z wiedzy opisanej w byle jakim podstawowym kursie.


--------------------
Go to the top of the page
+Quote Post
Początkujący
post
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 7.08.2010

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


Dopiero co zacząłem uczyć się php.
Przerabiam lekcję dotyczącą switcha i postanowiłem zrobić własny kod na podstawie zdobytej wiedzy. Dotychczas nigdy nie korzystałem z manuala, a teraz nie znalazłem w nim interesującej informacji.
Wiem, że za pomocą funkcji if mógłbym to zrobić, ale chcę po prostu zobaczyć, jak można to zrobić za pomocą funkcji switch.
Bo chyba nie trzeba wpisywać kilkadziesiąt razy case z kolejnymi godzinami, żeby funkcja switch działała prawidłowo?

Edycja: teraz działa, wystarczyło usunąć breaki winksmiley.jpg

Ten post edytował Początkujący 27.08.2010, 15:31:28
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Cytat(Początkujący @ 27.08.2010, 16:28:30 ) *
Edycja: teraz działa, wystarczyło usunąć breaki winksmiley.jpg

Breaki nie mają z tym nic wspólnego.


--------------------
Go to the top of the page
+Quote Post
minolone
post
Post #5





Grupa: Zarejestrowani
Postów: 141
Pomógł: 24
Dołączył: 21.06.2008

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


Witam. Rozwiązanie troche inne, lecz działa.
  1. <?php
  2. $godzina = 4;
  3.  
  4. if ( $godzina > 0 && $godzina < 14 )
  5. {
  6. echo 'Dzień dobry!';
  7. }elseif( $godzina >= 14 && $godzina < 18 )
  8. {
  9. echo 'Dobrego popołudnia';
  10. }elseif ( $godzina >= 18 && $godzina <= 24 )
  11. {
  12. echo 'Dobry wieczór';
  13. }else
  14. {
  15. echo 'Błąd';
  16. }
  17.  
  18. ?>


Ten post edytował minolone 27.08.2010, 17:30:12
Go to the top of the page
+Quote Post
Webmasterr
post
Post #6





Grupa: Zarejestrowani
Postów: 71
Pomógł: 5
Dołączył: 7.08.2010

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


Cytat(Początkujący @ 27.08.2010, 16:11:13 ) *
  1. <?php
  2. $godzina==125;
  3. switch ($godzina) {
  4. case "$godzina>0 and $godzina<14";
  5. echo "Dzień dobry!";
  6. break;
  7. case "$godzina>=14 and $godzina<18";
  8. echo "Dobrego popołudnia";
  9. break;
  10. case "$godzina>=18 and $godzina<=24";
  11. echo "dobry wieczór";
  12. break;
  13. default:
  14. echo "Ta godzina to zła godzina";
  15. }
  16.  
  17. ?>


Na początek 1 linijka. == To operator porównania, tym = przypisuje się wartość.
Więc zamiast '==' ma być '='.

Zamiast 'and' lepiej używać operatora '&&'.

I jeszcze jedno, masz:

  1. case "wyrażenie";


a po po sekcji case powinien być dwukropek (:), nie średnik (;).


Mam jeszcze uwagę co do wydajności kodu.
Zamiast cudzysłowów (") należy używać operatora konkatenacji tzn. łączenia tekstu z czymkolwiek innnym(.).
W takim wypadku zamiast:


  1. case "$godzina>0 and $godzina<14":


byłoby:

  1. case $godzina.'>0 and '.$godzina.'<14':


Po prostu w cudzysłowach parser PHP szuka zmiennych, i innych typów danych, a w apostrofach nie szuka nic.

Ten post edytował Webmasterr 27.08.2010, 16:25:44


--------------------

Darmowe e-booki (kliknij tutaj)
------------------------------------------------------------
Zapunktuj (kliknij tutaj) <--- Zarejestruj się i zobacz!
Darmowe doładowania telefonu, Eurogąbki itp.
------------------------------------------------------------
PHP 5, CSS 2.1, xHTML 1.1, JavaScript 1.7
Go to the top of the page
+Quote Post
Początkujący
post
Post #7





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 7.08.2010

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


Dziękuję za porady. Jednak Po case dałem dwukropki, usunąłem operator porównywania w zmiennej godzina. I niestety dalej nie działa. Chcę to zrobić na switchu, żeby zapoznać się ze schematem robienia instrukcji w nim. Jednak dalej wyświetla dzień dobry, zamiast "ta godzina to zła godzina".
  1. <?php
  2.  
  3. $godzina=125;
  4. switch ($godzina) {
  5.  
  6. case "$godzina>0&& $godzina<14":
  7.  
  8. echo 'Dzień dobry!';
  9. break;
  10.  
  11. case "$godzina>=14 && $godzina<18":
  12.  
  13. echo 'Dobrego popołudnia';
  14.  
  15. break;
  16. case "$godzina>=18 && $godzina<=24":
  17.  
  18. echo 'dobry wieczór';
  19.  
  20. break;
  21.  
  22. default:
  23.  
  24. echo 'Ta godzina to zła godzina';
  25.  
  26. }
  27. ?>

Go to the top of the page
+Quote Post
wookieb
post
Post #8





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Kumam jeden może nie umieć ale dwóch pod rzad?
DLACZEGO WASZE CASE-Y SĄ STRINGAMI wyrażeń logicznych?
Nie dość, że nie czytacie manuala to nawet jak czytacie to wymyślone bzdety wstawiacie
  1.  
  2. switch (true) {
  3.  
  4. case $godzina>0 && $godzina<14:
  5.  
  6. (.. jedziecie dalej)


--------------------
Go to the top of the page
+Quote Post
Początkujący
post
Post #9





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 7.08.2010

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


Działa. Wookieb, możesz wyjaśnić, w jakich sytuacjach bo case powinien być apostrof/cudzysłów, a w jakich nie?
Bo z tego " The statement list for a case can also be empty, which simply passes control into the statement list for the next case. " nie bardzo rozumiem.
Z gory dzięki
Go to the top of the page
+Quote Post
wookieb
post
Post #10





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




To co masz jest specyficznym przypadkiem. Poczytaj o wyrażeniach logicznych.
Wynik "case" musi być równy temu co podajesz do switch-a.


--------------------
Go to the top of the page
+Quote Post
Webmasterr
post
Post #11





Grupa: Zarejestrowani
Postów: 71
Pomógł: 5
Dołączył: 7.08.2010

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


Sorki za błąd. Pisałem na szybko, ale trzeba będzie to powtórzyć...


--------------------

Darmowe e-booki (kliknij tutaj)
------------------------------------------------------------
Zapunktuj (kliknij tutaj) <--- Zarejestruj się i zobacz!
Darmowe doładowania telefonu, Eurogąbki itp.
------------------------------------------------------------
PHP 5, CSS 2.1, xHTML 1.1, JavaScript 1.7
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 Aktualny czas: 22.08.2025 - 10:06