Написал парсер, который в цикле обходил страницы и собирал данные в переменные, которые в конце каждой итерации писались в базу.
Случайно заметил чушь в данных, начал копать и пришел к выводу, что при каждой новой итерации, переменные которые определены внутри цикла не стираются, а перезаписываются данными следующей итерации, а если в следующей итерации данных для этой переменной нет, то пустота НЕ ПЕРЕЗАПИСЫВАЕТ данные предыдущей итерации. Это реально так?
Че то впервые с этим столкнулся и немного прифигел…
ArbNet
Dram : Че то впервые с этим столкнулся и немного прифигел…
Тут два варианта:
Скрипт написал ты. Значит что-то не додумал, тестируй последовательно, найдёшь проблему, додумывай.
Скрипт написал другой. Можешь конечно копать его, додумывать за другого, костыли вставлять, но лучше написать свой 🙂
Dram
ArbNet #:
Тут два варианта:
Скрипт написал я. Значит описанное мной предположение невозможно? Переменные затираются при каждой итерации даже пустотой?
ArbNet
Dram #: Скрипт написал я
Смотреть вариант 1.
Dram
ArbNet #:
Смотреть вариант 1.
Прописал перед определением каждой переменной в цикле присвоение ей пустоты (очищаю каждую переменную при итерации) и все глюки пропали.
нет, не стираются. переменная в цикле ничем не отличается от переменной вне цикла)
silicoid
они и не должны стираться, если нужно убить переменную, надо использовать unset
Sly32
Существует такое понятие как инкапсуляция, надеюсь, это и в ПХП. Пиши код, ее используя и будет тебе счастье.
ArbNet
Sly32 #: инкапсуляция
Оо Sly32 новое слово выучил поздравляю 😀 Вообще-то инкапсуляция — это всего навсего скрытие(через private и protected) свойств и методов объекта.
Dram #: Прописал перед определением каждой переменной в цикле присвоение ей пустоты
ТС по ходу в вложенном цикле определял данные, но не обнулял буфер(переменную которую я обычно называю автобус), поэтому у него эти данные суммировались. Инкапсуляция тут никаким боком 🤔
Dram
ArbNet #:
ТС по ходу в вложенном цикле определял данные, но не обнулял буфер(переменную которую я обычно называю автобус), поэтому у него эти данные суммировались. Инкапсуляция тут никаким боком 🤔
Так и есть — переменные определялись внутри цикла и на каждой итерации писались в базу.
Странность для мня по сути вот в чем — если на данной итерации в переменную не приходило данных (парсер не находил инфы на странице), то я ожидал что переменная станет пустой, а она оставалось со значением из прошлой итерации.
silicoid
мне кажется, многие современные программисты забыли что такое цикл. помните, как в бейсике if — goto … Цикл, это не функция. Это просто возвращение к какой-либо предыдущей строке кода. Соответственно что бы вы не делали в цикле, переменные — вернее их количество — как было на входе, так и останется на выходе. (разумеется, если вы их в цикле не удаляете)
Dram
Написал парсер, который в цикле обходил страницы и собирал данные в переменные, которые в конце каждой итерации писались в базу.
Случайно заметил чушь в данных, начал копать и пришел к выводу, что при каждой новой итерации, переменные которые определены внутри цикла не стираются, а перезаписываются данными следующей итерации, а если в следующей итерации данных для этой переменной нет, то пустота НЕ ПЕРЕЗАПИСЫВАЕТ данные предыдущей итерации. Это реально так?
Че то впервые с этим столкнулся и немного прифигел…
ArbNet
Че то впервые с этим столкнулся и немного прифигел…
Тут два варианта:
Dram
Тут два варианта:
Скрипт написал я. Значит описанное мной предположение невозможно? Переменные затираются при каждой итерации даже пустотой?
ArbNet
Скрипт написал я
Смотреть вариант 1.
Dram
Смотреть вариант 1.
Прописал перед определением каждой переменной в цикле присвоение ей пустоты (очищаю каждую переменную при итерации) и все глюки пропали.
Было так
$full_name = addslashes(trim($pq->find('.c2m')->find('p')->find('a:eq(0)')->text()));стало так
totamon
silicoid
Sly32
ArbNet
инкапсуляция
Оо Sly32 новое слово выучил поздравляю 😀 Вообще-то инкапсуляция — это всего навсего скрытие(через private и protected) свойств и методов объекта.
Прописал перед определением каждой переменной в цикле присвоение ей пустоты
ТС по ходу в вложенном цикле определял данные, но не обнулял буфер(переменную которую я обычно называю автобус), поэтому у него эти данные суммировались. Инкапсуляция тут никаким боком 🤔
Dram
ТС по ходу в вложенном цикле определял данные, но не обнулял буфер(переменную которую я обычно называю автобус), поэтому у него эти данные суммировались. Инкапсуляция тут никаким боком 🤔
Так и есть — переменные определялись внутри цикла и на каждой итерации писались в базу.
Странность для мня по сути вот в чем — если на данной итерации в переменную не приходило данных (парсер не находил инфы на странице), то я ожидал что переменная станет пустой, а она оставалось со значением из прошлой итерации.
silicoid
мне кажется, многие современные программисты забыли что такое цикл. помните, как в бейсике if — goto …
Цикл, это не функция. Это просто возвращение к какой-либо предыдущей строке кода. Соответственно что бы вы не делали в цикле, переменные — вернее их количество — как было на входе, так и останется на выходе. (разумеется, если вы их в цикле не удаляете)