|
PHP/FI 2.0 использовал левую часть выражения для определения того, какого типа должно быть выражение.
PHP 3.0 учитывает обе части при определении типа результата, и это может вызвать другое поведение 2.0-скриптов в 3.0.
Рассмотрим пример:
$a[0]=5;
$a[1]=7;
$key = key($a);
while ("" != $key) {
echo "$keyn";
next($a);
} |
В PHP/FI 2.0 этот код выведет оба индекса $a. В PHP 3.0 вообще ничего не
будет выведено. Причина в том, что в PHP 2.0 тип левого аргумента был string/строка, было сделано сравнение строк,
"" не равно "0", и цикл выполнялся. В PHP 3.0,
когда string сравнивается с integer, выполняется целочисленное сравнение (string
конвертируется в integer). Это даёт сравнение atoi(""), равного 0, и variablelist, которое также равно
0, и поскольку 0==0, цикл не выполняется ни разу.
Исправить это просто. Замените оператор while на:
while ((string)$key != "") { |
| |