Forum und email
Typy výrazů

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:

$a[0]=5;
$a[1]=7;

$key = key($a);
while ("" != $key) {
    echo "$keyn";
    next($a);
}

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:

while ((string)$key != "") {