![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| z-END |
|
|||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: 5 Всего: 102 |
собственно изучая код, наткнулся на конструкцию такого вида:
и взгрыз меня вопрос - а кэшируется ли массив полученный из данной функции, или при каждой итерации форыча заново вызывается coresystem::get('accounts') ? сейчас на отдыхе и профайлера нет, но вопрос не дает покоя))) -------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
|||
|
||||
| Sanchezzz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 41 Всего: 60 |
скорее всего в память загоняет если нету указателя на переименую. затем при итерации сдвигает указатель возможно даже потихоньку освобождает память что я сомневаюсь. Но после выполнения цикла освобождается память почти вся у меня оставалось 168байт не освобожденных.
Дебагером не прогонял ручками замер сделал. -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
|||
|
||||
| Arantir |
|
||||
|
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
Тоже заинтриговало =)
И результат!
-------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
||||
|
|||||
| z-END |
|
|||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: 5 Всего: 102 |
Arantir, не совсем по моему вопросу.
я говорил о том, что например в функции get результат -каждый раз новый массив. например так:
-------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
|||
|
||||
| Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
z-END, внимательнее разберите код Arantir
-------------------- Мир это Я. Живее всех живых. |
|||
|
||||
| baldina |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 26 Всего: 101 |
по определению
т.е. его поведение эквивалентно использованию reset(), next() фактически foreach работает с итератором, т.е. на каждой итерации вызывается метод итератора, некая функция next(), а не выражение в foreach. выражение в foreach только устанавливает (возвращает) этот итератор. для примера рассмотрите
coresystem::get('accounts') однократно возвращает массив, foreach использует ссылку на него ЗЫ: если бы
то это get должен был бы иметь внутреннее состояние, не так ли ваши rand() вызовутся один раз, в момент создания массива. если нужен ленивый массив, можете создать свой Iterator. летом дискутировался вопрос о включении в php генераторов с поддержкой yeld (т.е. сопрограмм) https://wiki.php.net/rfc/generators |
||||||
|
|||||||
| Arantir |
|
||||||||||||
|
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
z-END, как раз по вашему вопросу =) Функция get() вызывается всего один раз, что видно из моего примера. И какой бы разный массив там не был, вы получите только первый.
Ну могу для наглядности немного изменить код:
Я вам даже еще более интересный пример приведу, который полностью подтверждает слова baldina
Ну и напоследок:
foreach не использует даже тот массив, который в нем задан непосредственно. Он использует копию этого массива. Вот так вот. Это сообщение отредактировал(а) Arantir - 27.11.2012, 18:29 -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
||||||||||||
|
|||||||||||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
||||
|
||||
| baldina |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 26 Всего: 101 |
это потому что у массива есть состояние - внутренний указатель на текущий элемент, используемый foreach иначе такой код не смог бы работать
Добавлено через 2 минуты и 19 секунд не совсем иначе не смог бы работать код
Добавлено через 7 минут и 20 секунд skyboy, примеры у нас одинаковые, видимо вы имели в виду не ленивое, а неполное копирование. |
||||||
|
|||||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
||||
|
||||
| MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
Ну наконец-то хоть какое-то интересное обсуждение, а не тысяча вопросов о том как воспользоваться стандартной ф-цией -------------------- Amazing |
|||
|
||||
| Sanchezzz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 41 Всего: 60 |
-------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |