array и версия PHP

Romantik

TeaM PHPClub
array и версия PHP

Приветствую.
Вот возник вопрос, в котором хочу разобраться
вот код:
PHP:
if(is_array($array)){
 reset(array);
 while (list($key,$val)= each($array)){....}
}
все нормально работает когда массив пустой
проверено на версиях
4.3.6
4.3.8
4.3.10
при проверке на 4.3.11
возникают варнинги:
Warning: reset(): Passed variable is not an array or object
Warning: Variable passed to each() is not an array or object
такой код на 4.3.11 варнингов не дает:
PHP:
if(is_array($array) AND (!empty($array)) ){
 reset(array);
 while (list($key,$val)= each($array)){....}
}
на других версиях, более 4.3.11 не проверял, но хотелось бы, кто может.

Не хотелось бы весь код перелопачивать ибо не мой. Какие есть варианты, кроме смены PHP ?
 

white phoenix

Новичок
Romantik
> Warning: reset(): Passed variable is not an array or object
> reset(array);
reset($array);
> Warning: Variable passed to each() is not an array or object
Каждое из значений элементов $array является массивом? Покажи var_dump($array);
 

udav_rus

Новичок
как варианты
1. выключить варнинги
2. @reset($array)


а почему бы не воспользоваться array_map?
 

Romantik

TeaM PHPClub
white phoenix

точно!
print_r() ничего не дает var_dump() показывает NULL
При существующем массиве $array ошибки не возникают.
можно просто попробовать пример.
 

Leksi

Новичок
У меня стоит 4.3.11
и данный код кроме
Notice: Undefined variable: array in ...
Ничего больше не выдает.
Только я
reset($array); так сделала
 

Romantik

TeaM PHPClub
Leksi
error_reporting(E_ALL ^E_NOTICE);
udav_rus
да, я понимаю, но хотелось бы до истины дойти.
http://www.php.net/ChangeLog-4.php#4.3.11
ничего не нашел, гугль находит темы с подобным
http://ua2.php.net/array в коментах тоже есть упоминание.

В моем случае классу передается массив массивов, который создается в абстракции. И по логике когда нет данных подмассив не создается.

В вообщем вопрос ясен, узнать бы только первоисточник и хотелось бы узнать как работает пример на версиях выше 4.3.11

буду благодарен
 

Leksi

Новичок
Поставь вначале
PHP:
$array = array();
Если ставить к коду приведенному в самом начале, то выдает:
Parse error: parse error, unexpected T_ARRAY_CAST

А если изменить
PHP:
reset(array)
на
PHP:
reset($array)
То проблем с кодом нет.


А вообще советую 5.1.2.
В моем случае от меня ничего не зависит. На чем говорят, на том и пишем.

-~{}~ 25.01.06 14:42:

Romantik
error_reporting(E_ALL ^E_NOTICE);
Считаю некрасивым стилем программирования
У меня стоит
error_reporting(E_ALL);
 

white phoenix

Новичок
Leksi
> Parse error: parse error, unexpected T_ARRAY_CAST
Приведи код.
Romantik
Сформулируй проблему.

-~{}~ 25.01.06 15:49:

Leksi
> Считаю некрасивым стилем программирования
Аргументируй.
 

Leksi

Новичок
PHP:
$array = array();
if(is_array($array)){
 reset($array); // работает нормально
 reset(array); // parse error, unexpected T_ARRAY_CAST
 while (list($key,$val)= each($array))
 {
 }
}
 

itprog

Cruftsman
Так в чем вопрос-то? Какую-то кашу развели в теме...

-~{}~ 25.01.06 15:51:

Leksi
ну опечатался человек, чего из этого проблему делать?..
 

Leksi

Новичок
white phoenix
Аргументируй.

Вообще это вопрос вне рамок этого топика. Но если писать изначально без нотисов, то появление нотиса будет признаком ошибки.
 

itprog

Cruftsman
<offtop>
white phoenix
Notice такая же ошибка...
В основном всё всплывает при register_globals = on
</offtop>
 

Romantik

TeaM PHPClub
Проблемы нет. Хотел узнать первоисточник проверки на пустой массив при reset и each (4.3.10 работает 4.3.11 нет)
и узнать в след версиях так же или нет
 

white phoenix

Новичок
Leksi
Про reset(array); забудь, это давно исправлено, очепятка.
>У меня стоит 4.3.11 и данный код кроме Notice: Undefined variable: array in ...
> Ничего больше не выдает. Только я reset($array); так сделала
Ошибка говорит о том что $array не определена, поэтому я попросил в начало скрипта записать $array = array();
> Вообще это вопрос вне рамок этого топика.
Согласен, думаю тебе не стоило поднимать этот вопрос. У меня всегда выключены т.к. не нужны, но это каждый сам выбирает.
Romantik
Дело не в этом.

-~{}~ 25.01.06 16:04:

itprog
> Notice такая же ошибка...
Да, E_NOTICE.
 

Leksi

Новичок
В общем я только и хотела сказать, что у меня на 4.3.11 все нормально работает.
 

svetasmirnova

маленький монстрик
Romantik
Вспомнила! Поищи в архивах php-intrenals на тот момент, когда 4.3.11 вышел в release. Там как раз человек задавал аналогичный вопрос и Derick Rethans ему подробно объяснял что и почему.
 
Сверху