W3docs

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 в целом.

Практика

Практика
Что верно об области видимости переменных в PHP, исходя из содержания указанного URL?
Что верно об области видимости переменных в PHP, исходя из содержания указанного URL?
Was this page helpful?