Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: $i = 0; warunek if - blad w PHP?
Forum PHP.pl > Forum > PHP
treewood
  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
redman2
co sie u Ciebie wyswietli, jezeli wpiszesz :

$i = '0';

questionmark.gif?
treewood
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
dr_bonzo
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 :/
kszychu
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.
treewood
Krzychu - logiczne wyjasnienie ... i w sumie dziwne, ze sie nie zorientowalem, ze tak jest aczkolwiek ciekawy przypadek
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.