Typy výrazů
PHP
/
FI
2.0
používalo
levou
stranu
výrazů
k
určení
,
jakého
typu
má
výsledek
být
.
PHP
3.0
bere
pro
určení
typu
v
úvahu
obě
strany
výrazu
,
a
to
může
způsobit
nepředvídatelné
chování
2.0
skriptů
v
PHP
3.0
.
Uvažujme
tento
příklad
:
V PHP/FI 2.0 by to zobrazilo obě hodnoty v $a. V PHP 3.0 se však
nezobrazí nic. Důvod je ten, že PHP 2.0 kvůli tomu, že na levé
straně je řetezec, provede porovnání řetězců, a
""
se nerovná
"0"
, tedy se bude procházet cyklem. V PHP 3.0 se řetězec porovná s
celým číslem (integer), provede se porovnání celých čísel
(řetězec je převeden na celé číslo). Výsledkem je porovnání
atoi("")
, což je
0
, a
variablelist
, což je také
0
. A protože
0==0
, cyklem se vůbec procházet nebude.
Oprava
pro
tento
příklad
je
snadná
.
Nahraďte
původní
konstrukci
tímto
: