Читая книгу Лауры Томсон "Разработка Web-приложений с помощью на PHP и MySQL" натолкнулся на следующие отрывки текста Объясните пожалуйста разночтения между 1-4 и 5 пунктами (стр. 131-133 вышеуказанной книги).
Согласен, злоупотреблять глобальными переменными не стоит. Но и суперглобальные переменные тоже имеют минусы. Они часто используются злоумышленниками. Ну а если их перед использованием подвергает предварительной обработке, то риск пропадает. Добавлено спустя 46 секунд: Не погорячились ли вы =) Добавлено спустя 11 минут 31 секунду: А что вам там не понятно?
Ты так и не понял наверно, для чего global. И по прежнему считаешь, что передавать переменную будет лучше по прототипу метода (функции). Да ты наверно не отличаешь 2 разные вещи, php-без-ООП и php-ООП. $array=array(); get('key',$array); У тебя логика не работает... Ты постоянно будешь передавать этот массив в прототип и тут вдруг произошел <матное слово>, тебе срочно нужно поменять название переменной (или там еще пара массивом нужна, не важно, что произашло), да хорошо когда под рукой IDE или редактор который найдет все вхождения во всех файлах, но мы говорим о логике, а тут тебе изменить нужно только в функции и везде где будет get('key') не будет нарушена работа. Тогда раз такое дело, использовать нужно ООП классы и объекты.
Незнаю кому этот ответ адресован. Кто то еще пишет без ООП? ) Вообще я говорил, что лучше обращаться к глобальным переменным из функций через $GLOBALS. Это делает код более понятным.
Да ну, ты, что-для smitt-это же пустяк. Он и без них справится =) Посмотрел бы, что он пишет обхохочешься. Сразу видно, не "ООП", не без не знает. Еще и спорить хочет =) Тоже любитель сравнивания с другими языками. Самой концепции не понимает. Ты уже проспорил =)
Давай пообщаемся. Да люблю сравнивать, только в сравнении можно увидеть достоинства и недостатки. И что бы все было ясно мы сейчас говорим о переменных объявленных через global $var; Где я уже спорил с тобой на эту тему и говорил что усложняется отладка.Твой ответ я не помню, но это не важно. Я тебе тогда задал другой вопрос на который не получил ответ. Из твоих сообщений у меня сложилось впечатление что ты знаком с java. Скажи как часто ты используешь там глобалы? Там их вообще нет, можно придумать костыль типа класс или что то еще, но их нет. При разработке 99,99999% программистов их не используют.И представь программы как то работают. Почему в php нельзя обойтись без global?Открою тебе секрет многие обходятся в том числе и я. P.S. Пишу используя ООП, первый язык который я выучил был C++ поэтому без классов уже не могу и не хочу писать Не хочу с тобой спорить потому что это может затянуться, а мне лень. К тому же хз может про костер ты не шутишь Скажи а соседи тебя боятся? После 22:00 не шумят, ремонт начинают делать только с твоего согласия? Ну что скажешь про java как ты там без глобалс? Тоскуешь?
Ну зачем? Java - это полностью объектно ориентированный язык. Какие там вообще могут быть глабальные переменные? Глобальная переменная в Java - это singleton. Если бы PHP был полностью объектно ориентированным, там тоже не было бы глобальных переменных. Добавлено спустя 7 минут 55 секунд: Какой в этом смысл, если есть отличный вариант с $GLOBALS['var']? Передавать переменную $config по ссылке в 100 функций? Я все это говорю про функциональный подход. Просто представив, что ООП в PHP не существует или использование его невозможно. Например если все крутится на kPHP )))
Попробуйте собрать модульную систему, предоставляющую модулям возможность копаться в некоем общем буфере/области памяти. Как не назови, глобалсом ли, синглетоном ли, "статическим регистром" ли, один хрен суть не меняется Глобальные переменные не зло и не плохой тон. Зло и плохой тон - использование их там, где они трижды нафиг не вперлись, либо, что еще упоротее, используя только их, превращая проект в неуправляемый неотлаживаемый апокалипсис. Эм... С вероятностью 95% я уверен, что он не знает JAVA или что-то еще кроме PHP.
оговорился? процедурный, а функциональный это кое-что другое. global или $GLOBALS[] одна фигня. глобальные переменные скрывают зависимости и потенциально могут быть причиной внезапных растройств. эволюция сделала виток и породила а) публичные статические переменные классов; б) шаблон проектирования "Реестр". что в принципе почти то же самое, разве что упаковывают глобальности в пределы некоторого пространства имен. сталобыть чуть более управляемый код. хотя шаловливые руки могут подмешать говна куда угодно. короче, global это что-то вроде скотча. им можно быстро что-то подшаманить, если нет сил и средств на что-то настоящее. я бы не хотел, чтобы мою машину чинили с помощью скотча. Добавлено спустя 12 минут 54 секунды: для читабельности - да. чтобы не возникало ситуации "не вникнув в код и не приняв во внимание область действия переменных, пользователи могут решить, что эти переменные являются одной и той же переменной". к сожалению сложность с зависимостями этот синтаксический изыск не решает.
Полностью согласен и поддерживаю artoodetoo. Но все же регистр дает больше контроля, но всегда есть вероятность нагадить. Если честно мне вот это интересно, вот почему я про java вспомнил, он ведь вроде как использует java... Такое чувство что человек не знает как использовать ООП без глобалс.
shelestov, сложно объяснять то, чего люди не знают и не понимают =) php, javascript, html, css, xml, json, mysql, sql, java-se + надстройки, c++, c# думаю список не стоит продолжать потому, что там еще jyton и, ... Что, самое худшее-это сравнения языков и не понимание, что такое "ООП". На 99% уверен, что ты никогда не работал с "Java", не писал: клиент<>сервер, гуи приложения, другие программы.