Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> $i = 0; warunek if - blad w PHP?
treewood
post 8.11.2004, 14:26:39
Post #1





Grupa: Zarejestrowani
Postów: 215
Pomógł: 0
Dołączył: 18.01.2003

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


  1. <?php
  2.  
  3. $i = 0;
  4.  
  5. switch ( $i )
  6. {
  7. case 'a':
  8. echo '<h2><center>a</center></h2>';
  9. break;
  10. }
  11.  
  12. if( $i == 'cos' ){
  13. echo '<h2><center>a</center></h2>';
  14. }
  15.  
  16. ?>


if i switch wykonuja sie i wyswietla mi sie dwa razy "a". nie powinno ... wiem, ze jest zapytanie === i wtedy jest weryfikacja typow jednak dziwi mnie to ... wiecie moze dlaczego tak sie dzieje?

testowalem na php 4.3.3 i 4.3.9


--------------------
Działam w OpenSolution.org, autor Quick.Cms i Quick.Cart już od ponad 10 lat
Go to the top of the page
+Quote Post
redman2
post 8.11.2004, 14:37:34
Post #2





Grupa: Zarejestrowani
Postów: 104
Pomógł: 3
Dołączył: 13.10.2004

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


co sie u Ciebie wyswietli, jezeli wpiszesz :

$i = '0';

questionmark.gif?
Go to the top of the page
+Quote Post
treewood
post 8.11.2004, 14:40:38
Post #3





Grupa: Zarejestrowani
Postów: 215
Pomógł: 0
Dołączył: 18.01.2003

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


ok od poczatku:
$i = 0; // wyswietli sie dwa razy a

$i = '0'; // nie wyswietli sie nic
$i = (string) 0; // nie wyswietla sie nic
$i = 1; // nie wyswietli sie nic
$i = false; // nie wyswietli sie nic


--------------------
Działam w OpenSolution.org, autor Quick.Cms i Quick.Cart już od ponad 10 lat
Go to the top of the page
+Quote Post
dr_bonzo
post 8.11.2004, 14:41:49
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Ciekawy przypadek... nawet w 5.0.2 tak dziala

  1. <?php
  2.  
  3. $i = 0;
  4.  
  5. switch ( strval($i) ) // <<<<<<<<<<<< teraz rozpoznaje prawidlowo
  6. {
  7. case &#092;"a\":
  8. {
  9. echo &#092;"<h2><center>litera a: $i</center></h2>\";
  10. break;
  11. }
  12. case 1:
  13. {
  14. echo &#092;"<h2><center>to jest jeden:$i</center></h2>\";
  15. break;
  16. }
  17. case 0:
  18. {
  19. echo &#092;"<h2><center>to jest zero:$i</center></h2>\";
  20. break;
  21. }
  22.  
  23. default:
  24. {
  25. echo &#092;"cos innego: $i\";
  26. }
  27. }
  28.  
  29. if( $i === 'cos' ) // === wtedy jest dobrze
  30. {
  31. echo &#092;"<h2><center>$i</center></h2>\";
  32. }
  33.  
  34. ?>


wyglada na to ze wartosc 0 (zero) pasuje do pierwszego lepszego warunku :/


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
kszychu
post 8.11.2004, 14:51:12
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


No i co w tym dziwnego? Działa tak, jak powinno działać. Jeżlei na początku przypiszesz do $i liczbę całkowitą, to wszystkie późniejsze porównania automatycznie konwertują drugą porównywaną wartość na liczbę całkowitą. A że z konwersji stringa na liczbę całkowitą wyjdzie 0, więc wynikiem porównania jest true.
Jak słusznie zaueażłeś treewood, operator == porównuje tylko wartości, więc gdy nie zgadzają się typy, następuje automatyczna konwersja, === natomiast porównuje i typy i wartości.


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
treewood
post 8.11.2004, 15:01:42
Post #6





Grupa: Zarejestrowani
Postów: 215
Pomógł: 0
Dołączył: 18.01.2003

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


Krzychu - logiczne wyjasnienie ... i w sumie dziwne, ze sie nie zorientowalem, ze tak jest aczkolwiek ciekawy przypadek


--------------------
Działam w OpenSolution.org, autor Quick.Cms i Quick.Cart już od ponad 10 lat
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: 15.06.2025 - 07:13