treewood
8.11.2004, 14:26:39
<?php
$i = 0;
switch ( $i )
{
case 'a':
echo '<h2><center>a</center></h2>'; break;
}
if( $i == 'cos' ){
echo '<h2><center>a</center></h2>'; }
?>
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
8.11.2004, 14:37:34
co sie u Ciebie wyswietli, jezeli wpiszesz :
$i = '0';

?
treewood
8.11.2004, 14:40:38
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
8.11.2004, 14:41:49
Ciekawy przypadek... nawet w 5.0.2 tak dziala
<?php
$i = 0;
switch ( strval($i) ) // <<<<<<<<<<<< teraz rozpoznaje prawidlowo {
case \"a\":
{
echo \"<h2><center>litera a: $i</center></h2>\"; break;
}
case 1:
{
echo \"<h2><center>to jest jeden:$i</center></h2>\"; break;
}
case 0:
{
echo \"<h2><center>to jest zero:$i</center></h2>\"; break;
}
default:
{
echo \"cos innego: $i\"; }
}
if( $i === 'cos' ) // === wtedy jest dobrze
{
echo \"<h2><center>$i</center></h2>\"; }
?>
wyglada na to ze wartosc 0 (zero) pasuje do pierwszego lepszego warunku :/
kszychu
8.11.2004, 14:51:12
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
8.11.2004, 15:01:42
Krzychu - logiczne wyjasnienie ... i w sumie dziwne, ze sie nie zorientowalem, ze tak jest aczkolwiek ciekawy przypadek