0Pricing
PHP Academy · Урок

Область видимости переменных: локальная и глобальная

Разберитесь, как PHP изолирует область видимости функции и как использовать ключевое слово global.

«Область видимости переменных: локальная и глобальная» — бесплатный урок PHP Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.

Область видимости переменных в PHP

В PHP у каждой переменной есть область видимости — участок кода, в котором она доступна.

  • Переменные, созданные вне функций, находятся в глобальной области видимости
  • Переменные, созданные внутри функций, находятся в локальной области видимости
  • В PHP НЕТ области видимости блока (в отличие от C или JavaScript)

Локальная область видимости

Переменные внутри функции являются локальными — они исчезают после возврата функции:

<?php
function compute(): void {
    $result = 42;  // local variable
    echo $result;  // 42
}

compute();
echo $result ?? 'undefined';  // undefined — $result is gone

Глобальные переменные НЕ видны автоматически

В отличие от многих языков, функции PHP по умолчанию не видят глобальные переменные — их необходимо явно импортировать:

<?php
$message = 'Hello';

function printMessage(): void {
    echo $message ?? 'not visible';  // 'not visible'
    // $message from global scope is not accessible here
}

Ключевое слово global

Используйте global $varName внутри функции, чтобы получить доступ к глобальной переменной:

<?php
$counter = 0;

function increment(): void {
    global $counter;
    $counter++;
}

increment();
increment();
echo $counter;  // 2

Суперглобальная переменная $GLOBALS

$GLOBALS — это массив, содержащий все глобальные переменные. Он доступен в любом месте без ключевого слова global:

<?php
$total = 100;

function addTax(): void {
    $GLOBALS['total'] *= 1.18;  // 18% tax
}

addTax();
echo $total;  // 118

Почему следует избегать global

Чрезмерное использование global создаёт скрытые зависимости — функции становится сложно тестировать и отлаживать. Предпочитайте передавать значения в качестве аргументов:

<?php
// Bad
$db = new PDO(/* ... */);
function getUsers(): array {
    global $db;
    return $db->query('SELECT * FROM users')->fetchAll();
}

// Good
function getUsers(PDO $db): array {
    return $db->query('SELECT * FROM users')->fetchAll();
}

Статические переменные

Переменная static сохраняет своё значение между вызовами функции, но по-прежнему является локальной для этой функции:

<?php
function callCount(): int {
    static $count = 0;
    return ++$count;
}

echo callCount();  // 1
echo callCount();  // 2
echo callCount();  // 3

Замыкания и захват переменных

Замыкания (анонимные функции) могут захватывать внешние переменные с помощью use:

<?php
$prefix = 'Mr';

$greet = function(string $name) use ($prefix): string {
    return "$prefix. $name";
};

echo $greet('Smith');  // Mr. Smith

Захват по ссылке

Используйте захват по ссылке с помощью use (&$var), чтобы замыкание могло изменять внешнюю переменную:

<?php
$total = 0;

$add = function(int $n) use (&$total): void {
    $total += $n;
};

$add(10);
$add(5);
echo $total;  // 15

Стрелочные функции

Стрелочные функции PHP 7.4 (fn =>) автоматически захватывают внешнюю область видимости по значению — use не требуется:

<?php
$multiplier = 3;
$nums = [1, 2, 3, 4];

$result = array_map(fn($n) => $n * $multiplier, $nums);

print_r($result);  // [3, 6, 9, 12]

Вложенные функции

PHP позволяет определять функцию внутри другой функции, но после вызова внешней функции внутренняя становится доступной глобально:

<?php
function outer(): void {
    function inner(): void {
        echo 'inner called';
    }
}

// inner(); // Fatal: undefined before outer() is called
outer();
inner(); // works now

Быстрая проверка

Что делает переменная static внутри функции PHP?

Итоги: область видимости переменных

Основные правила области видимости в PHP:

  • У функций есть собственная локальная область видимости
  • Глобальные переменные необходимо импортировать с помощью global
  • В качестве альтернативы используйте $GLOBALS['name']
  • Переменные static сохраняются между вызовами внутри функции
  • Замыкания захватывают внешние переменные с помощью use
  • Стрелочные функции автоматически захватывают переменные по значению

Часто задаваемые вопросы

Урок «Область видимости переменных: локальная и глобальная» бесплатный?

Да — полный текст урока «Область видимости переменных: локальная и глобальная» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.

Чему я научусь в уроке «Область видимости переменных: локальная и глобальная»?

Разберитесь, как PHP изолирует область видимости функции и как использовать ключевое слово global. Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать PHP Academy?

Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Область видимости переменных: локальная и глобальная»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке PHP Academy?

Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Определение и вызов функций
  2. Параметры по умолчанию и вариативные параметры
  3. Область видимости переменных: локальная и глобальная
  4. Анонимные функции и замыкания
← Назад к PHP Academy