Область видимости переменных: локальная и глобальная
Разберитесь, как 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 — локальная установка не требуется.
Все уроки этого курса
- Определение и вызов функций
- Параметры по умолчанию и вариативные параметры
- Область видимости переменных: локальная и глобальная
- Анонимные функции и замыкания