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

12
D
На сайте с 28.06.2008
Offline
1008
110

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

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

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

ArbNet
На сайте с 27.10.2019
Offline
83
#1
Dram :
Че то впервые с этим столкнулся и немного прифигел...

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

  1. Скрипт написал ты. Значит что-то не додумал, тестируй последовательно, найдёшь проблему, додумывай.
  2. Скрипт написал другой. Можешь конечно копать его, додумывать за другого, костыли вставлять, но лучше написать свой :)
Блажен, кто не стремится сделать лучше: он не рискует быть не понятым.
D
На сайте с 28.06.2008
Offline
1008
#2
ArbNet #:

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

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

ArbNet
На сайте с 27.10.2019
Offline
83
#3
Dram #:
Скрипт написал я

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

D
На сайте с 28.06.2008
Offline
1008
#4
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
На сайте с 12.05.2007
Offline
368
#5
нет, не стираются. переменная в цикле ничем не отличается от переменной вне цикла)
Домены за 0.99$ https://8fn.ru/99cent | Лучшие ВПС, ТП огонь, все страны! https://8fn.ru/inferno | ХОСТИНГ №1 РОССИИ https://8fn.ru/beget
S
На сайте с 13.10.2014
Offline
158
#6
они и не должны стираться,  если нужно убить переменную, надо использовать unset
S3
На сайте с 29.03.2012
Offline
238
#7
Существует такое понятие как инкапсуляция, надеюсь, это  и в ПХП. Пиши код, ее используя и будет тебе счастье.
ArbNet
На сайте с 27.10.2019
Offline
83
#8
Sly32 #:
инкапсуляция

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

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

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

D
На сайте с 28.06.2008
Offline
1008
#9
ArbNet #:

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

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

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

S
На сайте с 13.10.2014
Offline
158
#10

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

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий