За последние 24 часа нас посетили 72687 программистов и 1650 роботов. Сейчас ищут 899 программистов ...

Создание глобальной переменной

Тема в разделе "PHP для новичков", создана пользователем zevilz, 13 апр 2014.

  1. zevilz

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

    С нами с:
    14 июн 2010
    Сообщения:
    182
    Симпатии:
    0
    Есть файл, куда подключаются файл с классом с модели (Model) и файл с классом подключения к базе (sql). В файле с классом sql под классом создаю глобальную переменную $db и создаю в ней экземпляр класса sql:
    Код (Text):
    1. global $db;
    2. $db = new sql;
    Далее делаю выборку из базы в методе в файле с подклассом модели:
    Код (Text):
    1. $result = $db->query(...);
    но переменная $db уже потерялась по дороге.
    Работает только если с файлом подключения к БД добавить экземпляр класса sql в глоб. переменную $GLOBALS:
    Код (Text):
    1. $GLOBALS['db'] = new sql;
    а затем уже делать выборку через эту переменную:
    Код (Text):
    1. $result = $GLOBALS['db']->query(...);
    Но как то это не очень удобно. Попробовал создать переменную $db из $GLOBALS['db'] в файле, где подключаются эти файлы, но $db все равно теряется.
    Что я делаю не так?
     
  2. maxycwebber

    maxycwebber Новичок

    С нами с:
    25 мар 2014
    Сообщения:
    263
    Симпатии:
    11
    Адрес:
    Gdansk
    $result = $db->query(...);
    у тебя скорее всего лежит внутри функции. там также надо сделать global $db;
     
  3. zevilz

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

    С нами с:
    14 июн 2010
    Сообщения:
    182
    Симпатии:
    0
    да, лежит в функции. Но если там прописать global $db;, то $db уже заменится на пустую переменную
     
  4. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Строку global $db тебе придется написать не в одном месте, а в каждом методе, который будет использовать $db !

    global не "создает переменную", а говорит интерпретатору что переменную с таким именем надо искать в глобальной области видимости, а не в контексте данного метода.
     
  5. zevilz

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

    С нами с:
    14 июн 2010
    Сообщения:
    182
    Симпатии:
    0
    И в каждом методе создавать экземпляр класса?
    Может тогда уж лучше использовать $GLOBALS?
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Браток, не тупи. Создавай один раз. Пиши global каждый раз.

    Добавлено спустя 7 минут 32 секунды:
    лучше вообще не использовать глобальные переменные. зависимости надо внедрять в объекты — гугли push и pull внедрение зависимостей. а global или $GLOBAL это разное написание одного и того же г.
     
  7. zevilz

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

    С нами с:
    14 июн 2010
    Сообщения:
    182
    Симпатии:
    0
    Спасибо. Вкурил. Сам накосячил, что $db ничего не содержал) А я думал global затирает переменную.
     
  8. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Статики имеют бесплатную глобальность