Глобальные переменные
18 Apr 2012 15:29На своей шкуре ощутил, что глобальные переменные - зло. И лучше всю, то есть вообще всю, логику распихивать по подпрограммам.
Была у меня глобальная переменная $last_apl. В глобальной области видимости был цикл, выбирал данные из базы, компоновал их в эту переменную, и время от времени вызывал обработку - process_apl($last_apl). В process_apl уже локальный параметр назывался просто $apl, но в одном месте остался вызов мутатора с параметром $last_apl, с глобальной переменной... А мутатор тот редко работал, в большинстве случаев он оставлял всё как есть.
Что мы имеем - проверка синтаксиса проходит успешно, и сам скрипт тоже работает успешно, почти всегда. Ну вроде когда-то результаты получились чуть-чуть не такие, но списал на глюки. А тут ткнули носом - неверный результат сформировался! Странно, думаю, вроде для таких случаев как раз особая логика и написана... Вытащил мутатор в тестовый скрипт, закинул в него данные - отработал, поменял, всё правильно. Чудеса... А чудеса объяснялись просто.
И ведь $last_apl сразу после вызова process_apl инициализировалась заново, поэтому любые изменения в ней пропадали, источниками ошибок стать не могли.
Была у меня глобальная переменная $last_apl. В глобальной области видимости был цикл, выбирал данные из базы, компоновал их в эту переменную, и время от времени вызывал обработку - process_apl($last_apl). В process_apl уже локальный параметр назывался просто $apl, но в одном месте остался вызов мутатора с параметром $last_apl, с глобальной переменной... А мутатор тот редко работал, в большинстве случаев он оставлял всё как есть.
Что мы имеем - проверка синтаксиса проходит успешно, и сам скрипт тоже работает успешно, почти всегда. Ну вроде когда-то результаты получились чуть-чуть не такие, но списал на глюки. А тут ткнули носом - неверный результат сформировался! Странно, думаю, вроде для таких случаев как раз особая логика и написана... Вытащил мутатор в тестовый скрипт, закинул в него данные - отработал, поменял, всё правильно. Чудеса... А чудеса объяснялись просто.
И ведь $last_apl сразу после вызова process_apl инициализировалась заново, поэтому любые изменения в ней пропадали, источниками ошибок стать не могли.