Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Непонятный результат программы
По идее на первый взгляд она должна выводить 3 5 7 9 а на самом деле выводит 3, 5, 7, 5
Никак не могу понять почему выходные данные именно такие? Буду очень благодарен если кто нить обьяснит в чем тут фишка.
Саныч
Отправлено: 21 Сентября, 2013 - 12:35:38
Участник
Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010 Откуда: Украина, Запорожье
Помог: 62 раз(а)
koutinho, все дело в ссылке. У вас $i в строке 4 - это ссылка.
После foreach-а - это значение последнего элемента массива.
Затем в 8 строке вы его устанавливаете в 0, затем 4 итерации цикла и получается в итоге 5.
Если это в качестве учебного примера - то между циклами нужно добавить unset($i);
Если же нет - то это говнокод.
Что это?
----- Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
koutinho
Отправлено: 21 Сентября, 2013 - 12:39:23
Новичок
Покинул форум
Сообщений всего: 4
Дата рег-ции: Сент. 2013
Помог: 0 раз(а)
Саныч пишет:
koutinho, все дело в ссылке. У вас $i в строке 4 - это ссылка.
После foreach-а - это значение последнего элемента массива.
Затем в 8 строке вы его устанавливаете в 0, затем 4 итерации цикла и получается в итоге 5.
Ух да действительно, ну спасибо. Но все таки одно странно разве переменная i обьявленная в forech не является локальной и разве она не должна уничтожаться после выхода из цикла?
Это вопрос из теста по php, ну стало быть учебный пример.
Спасибо
Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010 Откуда: Украина, Запорожье
Помог: 62 раз(а)
koutinho пишет:
разве переменная i обьявленная в forech не является локальной и разве она не должна уничтожаться после выхода из цикла?
Своя область видимости, локальная, может быть только у функции/метода, но не у управляющих конструкций. У них нет своей области видимости, работают они с той, где объявлены. Если внутри метода/функции - то с локальной, если нет - с глобальной.
Уничтожаться само тоже ничего не должно.
Вобще возьмите за правило, если вы в цикле используете переменную-ссылку, то сразу за этим циклом уничтожать ее - unset($i).
----- Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
koutinho
Отправлено: 21 Сентября, 2013 - 12:50:55
Новичок
Покинул форум
Сообщений всего: 4
Дата рег-ции: Сент. 2013
Помог: 0 раз(а)
Саныч пишет:
koutinho пишет:
разве переменная i обьявленная в forech не является локальной и разве она не должна уничтожаться после выхода из цикла?
Своя область видимости, локальная, может быть только у функции/метода, но не у управляющих конструкций. У них нет своей области видимости, работают они с той, где объявлены. Если внутри метода/функции - то с локальной, если нет - с глобальной.
Уничтожаться само тоже ничего не должно.
Вобще возьмите за правило, если вы в цикле используете переменную-ссылку, то сразу за этим циклом уничтожать ее - unset($i).
Ага, понятно. Спасибо большое, Саныч. И еще один маленький вопрос, значит ли это что переменная инициализированная в цикле for в роли счетчика ну как правило i, тоже остается после выхода из цикла?
Саныч
Отправлено: 21 Сентября, 2013 - 12:54:00
Участник
Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010 Откуда: Украина, Запорожье
Помог: 62 раз(а)
koutinho пишет:
значит ли это что переменная инициализированная в цикле for в роли счетчика ну как правило i, тоже остается после выхода из цикла?
Очень интересно, только что проверил как с этим обстоят дела в c#, оказывается там все переменные обьявленные в цикле уничтожаются после выхода из цикла, ну тоесть у цикла своя область видимости.
Саныч
Отправлено: 21 Сентября, 2013 - 13:00:23
Участник
Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010 Откуда: Украина, Запорожье
Помог: 62 раз(а)
Не знаю, я с C# вобще не знаком.
В PHP не уничтожается, в javascript тоже, в С помойму тоже...
----- Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.