Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> porównanie zmiennej do 0 w if() / else if() oraz switch() - różnice, gdy zmienna = 0
blooregard
post
Post #1


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Witam,

Naprawdę zgłupiałem. Albo o czymś nie wiem.

Mam w programie taki test, gdzie zmienna może przyjąć trzy wartości: mniejszą od zera, większą od zera bądź zero.
Żeby nie jechać trzy razy if / else if / else if napisałem swich(), który w zależności od wartości zmiennej podejmuje odpowiednie działania.
W case() sprawdzam po kolei wystąpienie wszystkich warunków:
case ($a < 0) ... bla bla rób to; break;
case ($a > 0) ... bla bla rób tamto; break;
case ($a == 0) ... bla bla siamto; break;
Moja radośc trwała do momentu, gdy zmienna $a przyjęła wartość 0, a wkonał się kod zawarty w teście case($a < 0).
Myślę sobie, qrde, co jest, od kiedy 0 jest mniejsze od 0 ?
No i zaczęła się walka.
Ustawiałem warunki w różnej kolejności, eliminowałem warunek case ($a == 0), wtedy i tak wykonywał się kod zawarty w case ($a < 0),
rzutowałem $a na wszelkie możliwe intval-e , integery itp. , porównywałem ją w taki sposób: case ($a === 0).
Nic.
Uprzedzając wszelkie pytania: nie ma błędów w składni, wszędzie są brejki itd.

Z problemem zetknąłem się w większej aplikacji, ale dla porównania napisałem sobie ten test:
  1. <?php
  2. //$a = -1;
  3. $a = 0;
  4. //$a = 1;
  5.  
  6. echo '$a = '.$a;
  7.  
  8. echo '<br />w switch(): a ';
  9. switch ($a) {
  10.    case ($a == 0): echo ' = 0'; break;
  11.    case ($a < 0): echo ' < 0'; break;
  12.    case ($a > 0): echo ' > 0'; break;
  13. }//switch
  14.  
  15. echo '<br />w if() / else if() / else if() : a ';
  16. if ($a == 0) {
  17.    echo ' = 0';
  18. } else if ($a < 0) {
  19.    echo '< 0';
  20. } else if ($a > 0) {
  21.    echo '> 0';
  22. }//if
  23. ?>


Teraz, gdy uruchamiam go sobie po kolei dla każdej wartości $a, mam następujące wyniki:
Kod
$a = -1
w switch(): a < 0
w if() / else if() / else if() : a < 0


Kod
$a = 1
w switch(): a > 0
w if() / else if() / else if() : a > 0


A teraz uwaga: dla $a = 0:
Kod
$a = 0
w switch(): a < 0
w if() / else if() / else if() : a = 0


WTF ?
Go to the top of the page
+Quote Post

Posty w temacie


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: 20.12.2025 - 13:04