global
Ключевое слово "global" в PHP используется для доступа к переменным, объявленным вне текущей функции. Синтаксис и примеры использования.
Ключевое слово PHP "global": полное руководство
В PHP переменные имеют ограниченную область видимости — переменная, созданная внутри функции, является локальной для этой функции и не видит переменных, определённых в основном скрипте, и наоборот. Ключевое слово global устраняет этот барьер: оно указывает функции использовать ту же переменную, которая существует в глобальной (уровня скрипта) области видимости, вместо создания новой локальной.
Эта страница охватывает синтаксис global, принципы работы области видимости переменных, связь между global и суперглобальным массивом $GLOBALS, практические примеры, распространённые ошибки и ситуации, когда стоит использовать более чистую альтернативу.
Понимание области видимости переменных
По умолчанию переменная, определённая вне функции, не видна внутри неё:
<?php
$message = "Hello";
function show() {
echo $message; // Notice: Undefined variable $message
}
show();Функция show() не имеет доступа к $message, потому что $message живёт в глобальной области видимости, а show() имеет собственную отдельную локальную область. Ключевое слово global — один из способов дать функции доступ к этой внешней переменной.
Синтаксис
Ключевое слово "global" используется для доступа к глобальной переменной в PHP. Вот базовый синтаксис использования ключевого слова "global":
Синтаксис PHP для global
<?php
$variableName = "initial value";
function functionName() {
global $variableName;
// code to be executed
}В этом примере ключевое слово global используется для доступа к переменной $variableName, объявленной вне текущей функции. После объявления глобальной, любое изменение, которое функция вносит в $variableName, отражается во внешней области видимости, и любое изменение, сделанное снаружи, видно внутри функции.
Также можно импортировать несколько глобальных переменных одновременно, разделяя их запятыми:
<?php
$x = 5;
$y = 10;
function addThem() {
global $x, $y;
echo $x + $y; // Output: 15
}
addThem();Примеры
Рассмотрим несколько практических примеров использования ключевого слова "global":
Примеры PHP global
<?php
// Example 1
$counter = 0;
function incrementCounter()
{
global $counter;
$counter++;
}
incrementCounter();
echo $counter . PHP_EOL; // Output: 1
// Example 2
$color = "red";
function changeColor()
{
global $color;
$color = "blue";
}
changeColor();
echo $color; // Output: blueВ этих примерах мы используем ключевое слово global для доступа к переменным, объявленным вне текущей функции, и для изменения их значений.
global и массив $GLOBALS
PHP также предоставляет доступ ко всем глобальным переменным через суперглобальный массив $GLOBALS — ассоциативный массив, ключами которого являются имена переменных. В отличие от global, $GLOBALS доступен в любой области видимости без объявления, поэтому следующие две функции эквивалентны:
<?php
$total = 100;
function withGlobal() {
global $total;
$total += 1;
}
function withGlobals() {
$GLOBALS['total'] += 1;
}
withGlobal();
withGlobals();
echo $total; // Output: 102$GLOBALS удобен, когда нужно использовать всего одну или две внешние переменные, поскольку позволяет избежать отдельной строки объявления global. Оба подхода читают и записывают в одни и те же базовые переменные.
Распространённые ошибки
globalработает только для переменных, которые уже существуют или которые вы намерены создать в глобальной области видимости. Опечатка в имени переменной молча создаёт другую глобальную переменную вместо возникновения ошибки.- Объявление должно идти перед использованием переменной. Объявляйте
global $name;в начале функции, перед любой ссылкой на$name. globalне действует на константы иstatic-переменные — оно предназначено исключительно для обычных переменных глобальной области видимости.- Скрытые зависимости. Функция, использующая
global, может вести себя по-разному в зависимости от состояния скрипта, что затрудняет её тестирование в изоляции.
Преимущества
Использование ключевого слова "global" имеет ряд преимуществ:
- Доступ к глобальным переменным: ключевое слово "global" позволяет получать доступ и изменять переменные, объявленные вне текущей функции или класса.
- Замечание о поддерживаемости: хотя
globalобеспечивает прямой доступ к переменным внешней области видимости, чрезмерное его использование может затруднить отладку и тестирование кода. Современная PHP-разработка предпочитает передачу переменных в качестве параметров функций, использование инъекции зависимостей или обращение к суперглобальному массиву$GLOBALS, когда это необходимо.
Заключение
В заключение, ключевое слово "global" позволяет PHP-разработчикам получать доступ к переменным, объявленным вне текущей функции или класса. Хотя оно может быть полезным для быстрых скриптов или устаревшего кода, современные лучшие практики PHP рекомендуют ограничивать его использование во избежание жёсткой связанности и проблем с поддерживаемостью. Для лучшей архитектуры рассмотрите передачу переменных в качестве параметров, использование инъекции зависимостей или суперглобального массива $GLOBALS.
Чтобы углубиться в тему, ознакомьтесь с материалами об области видимости переменных PHP, ключевом слове static для переменных, сохраняющих значение между вызовами, и переменных PHP в целом.