За последние 24 часа нас посетили 18240 программистов и 1606 роботов. Сейчас ищет 941 программист ...

Какой результат дает оператор global?

Тема в разделе "Прочие вопросы по PHP", создана пользователем ivan89, 6 авг 2013.

  1. ivan89

    ivan89 Новичок

    С нами с:
    6 авг 2013
    Сообщения:
    10
    Симпатии:
    0
    Читая книгу Лауры Томсон "Разработка Web-приложений с помощью на PHP и MySQL" натолкнулся на следующие отрывки текста

    Объясните пожалуйста разночтения между 1-4 и 5 пунктами (стр. 131-133 вышеуказанной книги).
     
  2. shelestov

    shelestov Активный пользователь

    С нами с:
    25 авг 2011
    Сообщения:
    148
    Симпатии:
    0
    Адрес:
    Россия, Арзамас
    Лучше использовать $GLOBALS для доступа к глобальным переменным из функций.
     
  3. ivan89

    ivan89 Новичок

    С нами с:
    6 авг 2013
    Сообщения:
    10
    Симпатии:
    0
    А что насчет разночтений?
     
  4. shelestov

    shelestov Активный пользователь

    С нами с:
    25 авг 2011
    Сообщения:
    148
    Симпатии:
    0
    Адрес:
    Россия, Арзамас
    Да ладно, 90% русскоязычных книг по PHP это полный шлак.
    Глобальные переменные - ЗЛО.
     
  5. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    О да это зло... только готовьтесь, если это увидит Your начнется спор... проверенно неоднократно:)
     
  6. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Согласен, злоупотреблять глобальными переменными не стоит. Но и суперглобальные переменные тоже имеют минусы. Они часто используются злоумышленниками. Ну а если их перед использованием подвергает предварительной обработке, то риск пропадает.

    Добавлено спустя 46 секунд:
    Не погорячились ли вы =)

    Добавлено спустя 11 минут 31 секунду:
    А что вам там не понятно?
     
  7. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    блин таких на костре бы сжег. Конченых.
     
  8. shelestov

    shelestov Активный пользователь

    С нами с:
    25 авг 2011
    Сообщения:
    148
    Симпатии:
    0
    Адрес:
    Россия, Арзамас
    Это мое ИМХО!
     
  9. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Ты так и не понял наверно, для чего global.
    И по прежнему считаешь, что передавать переменную будет лучше по прототипу метода (функции).
    Да ты наверно не отличаешь 2 разные вещи, php-без-ООП и php-ООП.
    $array=array();

    get('key',$array);

    У тебя логика не работает... Ты постоянно будешь передавать этот массив в прототип и тут вдруг произошел <матное слово>, тебе срочно нужно поменять название переменной (или там еще пара массивом нужна, не важно, что произашло), да хорошо когда под рукой IDE или редактор который найдет все вхождения во всех файлах, но мы говорим о логике, а тут тебе изменить нужно только в функции и везде где будет get('key') не будет нарушена работа.

    Тогда раз такое дело, использовать нужно ООП классы и объекты.
     
  10. shelestov

    shelestov Активный пользователь

    С нами с:
    25 авг 2011
    Сообщения:
    148
    Симпатии:
    0
    Адрес:
    Россия, Арзамас
    Незнаю кому этот ответ адресован.
    Кто то еще пишет без ООП? :))

    Вообще я говорил, что лучше обращаться к глобальным переменным из функций через $GLOBALS.
    Это делает код более понятным.
     
  11. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    shelestov, да это старая тема, о том, что глобал используется если не писать на ООП.
     
  12. shelestov

    shelestov Активный пользователь

    С нами с:
    25 авг 2011
    Сообщения:
    148
    Симпатии:
    0
    Адрес:
    Россия, Арзамас
    Если без ООП, то да, без глобалсов будет трудновато.
     
  13. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    У тебя какие то наклонности маньяка:)

    Было бы желание поспорил с тобой, но я не в настроении...
     
  14. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Да ну, ты, что-для smitt-это же пустяк. Он и без них справится =)
    Посмотрел бы, что он пишет обхохочешься.
    Сразу видно, не "ООП", не без не знает.
    Еще и спорить хочет =)
    Тоже любитель сравнивания с другими языками.
    Самой концепции не понимает.

    Ты уже проспорил =)
     
  15. shelestov

    shelestov Активный пользователь

    С нами с:
    25 авг 2011
    Сообщения:
    148
    Симпатии:
    0
    Адрес:
    Россия, Арзамас
    Да хрен с ними, с глобаксами.
    Давайте о вреде синглтонов еще поспорим. :))


    Шутка!
     
  16. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Давай пообщаемся.
    Да люблю сравнивать, только в сравнении можно увидеть достоинства и недостатки.

    И что бы все было ясно мы сейчас говорим о переменных объявленных через global $var;

    Где я уже спорил с тобой на эту тему и говорил что усложняется отладка.Твой ответ я не помню, но это не важно.
    Я тебе тогда задал другой вопрос на который не получил ответ.
    Из твоих сообщений у меня сложилось впечатление что ты знаком с java.
    Скажи как часто ты используешь там глобалы?
    Там их вообще нет, можно придумать костыль типа класс или что то еще, но их нет.
    При разработке 99,99999% программистов их не используют.И представь программы как то работают.

    Почему в php нельзя обойтись без global?Открою тебе секрет многие обходятся в том числе и я.
    P.S.
    Пишу используя ООП, первый язык который я выучил был C++ поэтому без классов уже не могу и не хочу писать:)

    Не хочу с тобой спорить потому что это может затянуться, а мне лень.
    К тому же хз может про костер ты не шутишь:) Скажи а соседи тебя боятся? После 22:00 не шумят, ремонт начинают делать только с твоего согласия? :)

    Ну что скажешь про java как ты там без глобалс? Тоскуешь? :)
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Я думаю тяга к глобалсам у людей, которые не знают, что переменную можно передать по ссылке.
     
  18. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    есть такое заболевание?
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну да как и ооп, как и "только функции". короче дело обычное =)
     
  20. shelestov

    shelestov Активный пользователь

    С нами с:
    25 авг 2011
    Сообщения:
    148
    Симпатии:
    0
    Адрес:
    Россия, Арзамас
    Ну зачем?
    Java - это полностью объектно ориентированный язык.
    Какие там вообще могут быть глабальные переменные?
    Глобальная переменная в Java - это singleton.

    Если бы PHP был полностью объектно ориентированным, там тоже не было бы глобальных переменных.

    Добавлено спустя 7 минут 55 секунд:
    Какой в этом смысл, если есть отличный вариант с $GLOBALS['var']?
    Передавать переменную $config по ссылке в 100 функций?

    Я все это говорю про функциональный подход.
    Просто представив, что ООП в PHP не существует или использование его невозможно.
    Например если все крутится на kPHP )))
     
  21. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Попробуйте собрать модульную систему, предоставляющую модулям возможность копаться в некоем общем буфере/области памяти. Как не назови, глобалсом ли, синглетоном ли, "статическим регистром" ли, один хрен суть не меняется:)

    Глобальные переменные не зло и не плохой тон. Зло и плохой тон - использование их там, где они трижды нафиг не вперлись, либо, что еще упоротее, используя только их, превращая проект в неуправляемый неотлаживаемый апокалипсис.

    Эм... С вероятностью 95% я уверен, что он не знает JAVA или что-то еще кроме PHP.
     
  22. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    оговорился? процедурный, а функциональный это кое-что другое.

    global или $GLOBALS[] одна фигня. глобальные переменные скрывают зависимости и потенциально могут быть причиной внезапных растройств.
    эволюция сделала виток и породила
    а) публичные статические переменные классов;
    б) шаблон проектирования "Реестр".
    что в принципе почти то же самое, разве что упаковывают глобальности в пределы некоторого пространства имен. сталобыть чуть более управляемый код. хотя шаловливые руки могут подмешать говна куда угодно.

    короче, global это что-то вроде скотча. им можно быстро что-то подшаманить, если нет сил и средств на что-то настоящее. я бы не хотел, чтобы мою машину чинили с помощью скотча.

    Добавлено спустя 12 минут 54 секунды:
    для читабельности - да. чтобы не возникало ситуации "не вникнув в код и не приняв во внимание область действия переменных, пользователи могут решить, что эти переменные являются одной и той же переменной". к сожалению сложность с зависимостями этот синтаксический изыск не решает.
     
  23. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Полностью согласен и поддерживаю artoodetoo.

    Но все же регистр дает больше контроля, но всегда есть вероятность нагадить.

    Если честно мне вот это интересно, вот почему я про java вспомнил, он ведь вроде как использует java...

    Такое чувство что человек не знает как использовать ООП без глобалс.
     
  24. shelestov

    shelestov Активный пользователь

    С нами с:
    25 авг 2011
    Сообщения:
    148
    Симпатии:
    0
    Адрес:
    Россия, Арзамас
    Да, увлекся быстрописанием :)
     
  25. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    shelestov, сложно объяснять то, чего люди не знают и не понимают =)

    php, javascript, html, css, xml, json, mysql, sql, java-se + надстройки, c++, c#
    думаю список не стоит продолжать потому, что там еще jyton и, ...

    Что, самое худшее-это сравнения языков и не понимание, что такое "ООП".
    На 99% уверен, что ты никогда не работал с "Java", не писал: клиент<>сервер, гуи приложения, другие программы.