Typy
výrazov
PHP
/
FI
2.0
využívalo
ľavú
stranu
výrazu
pre
stanovenie
,
akého
typu
by
výsledok
mal
byť
.
PHP
3.0
započítava
obe
strany
pri
stanovovaní
typov
výsledku
,
a
tento
spôsob
môže
v
2.0
skriptoch
spôsobiť
,
že
sa
v
3.0
bude
správať
nepredvídateľne
.
Posúďte
na
tomto
príklade
:
V PHP/FI 2.0 by toto zobrazilo oba $a indexy. V PHP 3.0 by to
nezobrazilo nič. Dôvodom je, že v PHP 2.0, pretože ľavý typ
argumentu bol string, sa porovnával string a
""
sa rozhodne nerovná
"0"
, čiže slučka prešla. V PHP 3.0, keď sa porovnáva string s
integerom, porovná sa integer (string sa prekonvertuje na
integer). To sa prejaví pri porovnávaní
atoi("")
, ktorý sa rovná
0
, a
variablelist
, ktorý sa tiež rovná
0
, a pretože
0==0
, slučka už viac neprejde.
Toto
sa
dá
jednoducho
opraviť
.
Nahraďte
príkaz
while
s
: