Что такое $GLOBALS в PHP?

Ответ

$GLOBALS — это суперглобальный массив в PHP, который содержит ссылки на все переменные, определённые в глобальной области видимости скрипта. Его ключи — это имена переменных, а значения — их содержимое.

Ключевые особенности:

  • Доступен из любого контекста (внутри функций, методов, классов) без необходимости использования ключевого слова global.
  • Изменение элемента в $GLOBALS напрямую влияет на соответствующую глобальную переменную, и наоборот.
  • Частое использование считается антипаттерном, так как создаёт скрытые зависимости и усложняет тестирование и поддержку кода.

Пример использования:

$globalVar = 'Привет';

function testGlobals() {
    // Доступ к глобальной переменной через $GLOBALS
    echo $GLOBALS['globalVar']; // Выведет: Привет

    // Изменение глобальной переменной
    $GLOBALS['globalVar'] = 'Мир';

    // Добавление новой глобальной переменной
    $GLOBALS['newVar'] = 42;
}

testGlobals();
echo $globalVar; // Выведет: Мир
echo $newVar;    // Выведет: 42

Альтернативы и лучшие практики:

  1. Явная передача аргументов в функции.
  2. Использование классов и свойств объектов для инкапсуляции состояния.
  3. Внедрение зависимостей (Dependency Injection) через конструктор или методы.
  4. Использование контейнеров зависимостей (например, в фреймворках Symfony, Laravel).

Ответ 18+ 🔞

А, ну это же классика, ёпта! Смотри, есть в PHP такая штука — $GLOBALS. Представь себе огромный, пиздец какой большой, шкаф-купе, куда свалили абсолютно все вещи, которые лежат в прихожей твоего скрипта. Все глобальные переменные, блядь, все! И доступ к этому бардаку есть отовсюду: залез в функцию, открыл этот шкаф — и вот она, твоя переменная, валяется где-то между старыми $_POST и $_SERVER.

В чём прикол, спросишь?

  • Тебе не надо орать global $myVar; как идиоту. Просто ткни пальцем в $GLOBALS['myVar'] и всё, она твоя.
  • Поменял что-то в этом массиве — и оригинальная переменная снаружи тоже поменялась, будто ты ей впендюрил новое значение напрямую. Магия, сука!
  • Создал новый ключ в $GLOBALS — поздравляю, ты только что родил новую глобальную переменную из воздуха. Сам от себя охуел, да?

Вот смотри, как это выглядит в деле:

$globalVar = 'Привет';

function testGlobals() {
    // Достаём из того самого шкафа
    echo $GLOBALS['globalVar']; // Выведет: Привет

    // Наводим свой порядок, хуяк — и меняем
    $GLOBALS['globalVar'] = 'Мир';

    // А можно и новую хрень в шкаф запихнуть
    $GLOBALS['newVar'] = 42;
}

testGlobals();
echo $globalVar; // Выведет: Мир
echo $newVar;    // Выведет: 42

Но тут, чувак, есть одна хитрая жопа. Пользоваться этим — всё равно что хранить все инструменты в одной куче: вроде всё под рукой, но потом терпения ноль ебать, пока найдёшь отвёртку. Это считается моветоном, антипаттерном, потому что твой код превращается в спагетти, где всё зависит от всего, и доверия ебать ноль, что ничего не сломается.

Что делать, чтобы не быть распиздяем?

  1. Явно передавай аргументы в функцию. Не ленись, напиши параметры.
  2. Используй объекты и их свойства. Заверни свои данные в класс — это как чемоданчик с инструментами, а не та самая куча.
  3. Внедряй зависимости. Отдавай нужное прямо в руки (в конструктор или метод), а не заставляй лезть в глобальный шкаф.
  4. В больших проектах есть контейнеры зависимостей (как в Laravel или Symfony). Это уже профессиональный органайзер, а не $GLOBALS.

Короче, $GLOBALS — это как аварийный выход. Знать про него надо, но ходить через него каждый день — подозрение ебать чувствую к такому разработчику.