Переменные в цикле не стираются при итерации PHP?


Dram
109

Написал парсер, который в цикле обходил страницы и собирал данные в переменные, которые в конце каждой итерации писались в базу.

Случайно заметил чушь в данных, начал копать и пришел к выводу, что при каждой новой итерации, переменные которые определены внутри цикла не стираются, а перезаписываются данными следующей итерации, а если в следующей итерации данных для этой переменной нет, то пустота НЕ ПЕРЕЗАПИСЫВАЕТ данные предыдущей итерации. Это реально так?

Че то впервые с этим столкнулся и немного прифигел…


ArbNet
Dram :
Че то впервые с этим столкнулся и немного прифигел…

Тут два варианта:

  1. Скрипт написал ты. Значит что-то не додумал, тестируй последовательно, найдёшь проблему, додумывай.
  2. Скрипт написал другой. Можешь конечно копать его, додумывать за другого, костыли вставлять, но лучше написать свой 🙂


Dram
ArbNet #:

Тут два варианта:

Скрипт написал я. Значит описанное мной предположение невозможно? Переменные затираются при каждой итерации даже пустотой?


ArbNet
Dram #:
Скрипт написал я

Смотреть вариант 1.


Dram
ArbNet #:

Смотреть вариант 1.

Прописал перед определением каждой переменной в цикле присвоение ей пустоты (очищаю каждую переменную при итерации) и все глюки пропали.

Было так

$full_name = addslashes(trim($pq->find('.c2m')->find('p')->find('a:eq(0)')->text()));

стало так

$full_name="";
$full_name = addslashes(trim($pq->find('.c2m')->find('p')->find('a:eq(0)')->text()));

totamon
нет, не стираются. переменная в цикле ничем не отличается от переменной вне цикла)

silicoid
они и не должны стираться,  если нужно убить переменную, надо использовать unset

Sly32
Существует такое понятие как инкапсуляция, надеюсь, это  и в ПХП. Пиши код, ее используя и будет тебе счастье.

ArbNet
Sly32 #:
инкапсуляция

Оо Sly32 новое слово выучил поздравляю 😀 Вообще-то инкапсуляция — это всего навсего скрытие(через private и protected) свойств и методов объекта.

Dram #:
Прописал перед определением каждой переменной в цикле присвоение ей пустоты

ТС по ходу в вложенном цикле определял данные, но не обнулял буфер(переменную которую я обычно называю автобус), поэтому у него эти данные суммировались. Инкапсуляция тут никаким боком 🤔


Dram
ArbNet #:

ТС по ходу в вложенном цикле определял данные, но не обнулял буфер(переменную которую я обычно называю автобус), поэтому у него эти данные суммировались. Инкапсуляция тут никаким боком 🤔

Так и есть — переменные определялись внутри цикла и на каждой итерации писались в базу.

Странность для мня по сути вот в чем — если на данной итерации в переменную не приходило данных (парсер не находил инфы на странице), то я ожидал что переменная станет пустой, а она оставалось со значением из прошлой итерации.


silicoid

мне кажется, многие современные программисты забыли что такое цикл.  помните, как в бейсике if — goto …
Цикл, это не функция. Это просто возвращение к какой-либо предыдущей строке кода. Соответственно что бы вы не делали в цикле, переменные — вернее их количество — как было на входе, так и останется на выходе. (разумеется, если вы их в цикле не удаляете)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *