Forum und email

Tipos de Expressões

PHP/FI 2.0 usava o lado esquerdo das expressões para determinar qual tipo o resultado seria. PHP 3.0 leva os dois lados em consideração quando determina os tipos dos resultados, e isso pode causar que scripts do 2.0 se comportem inexperadamente no 3.0.

Considere esse exemplo:

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

$key = key($a);
while ("" != $key) {
    echo "$keyn";
    next($a);
}
No PHP/FI 2.0, isso mostraria ambos os índices de $a. No PHP 3.0, não mostraria nada. A razão para isso é que no PHP 2.0, porque o argumento da esquerda é uma string, uma comparação de string é feita, e de fato, "" não é igual a "0", e o loop continuou. No PHP 3.0, quando uma string é comparada a um inteiro, uma comparação de inteiros é feita (a string é convertida para um inteiro). Isso resulta em comparar atoi("") que é 0, e variablelist que também é 0, e uma vez que 0==0, o loop não passa nenhuma vez.

Consertar isso é simples. Substitua a instrução while com:

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