Глобальные переменные в функциях

Тренажер по PHP для пользователей с начальным уровнем подготовки.

Тренажер PHP

В этом уроке мы изучаем работу с глобальными переменными внутри функций PHP. По умолчанию переменные, объявленные вне функций, недоступны внутри них - у функций своя локальная область видимости. Но иногда нужно получить доступ к глобальным переменным изнутри функции. PHP предоставляет несколько способов: ключевое слово global, суперглобальный массив $GLOBALS, и передача по ссылке. Также мы рассмотрим статические переменные - они сохраняют свои значения между вызовами функции. Понимание областей видимости критически важно для написания правильного кода. В заданиях вы научитесь использовать все эти механизмы, избегать типичных ошибок и выбирать правильный способ работы с переменными в зависимости от задачи.

Список тем

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

id: 39001_task1

Определите, что выведет этот код. Обратите внимание на область видимости переменной $count.

Выберите правильный вариант ответа
<?php
$count = 10;

function showCount() {
    echo $count;
}

showCount();
?>
Сообщения
Проверить
Показать подсказку

Использование global

id: 39001_task2

Дополните код, чтобы функция могла изменить глобальную переменную $total используя ключевое слово global.

Заполните пропуски
<?php
$total = 100;

function addToTotal($value) {
    input1S input2S;
    $total += $value;
}

addToTotal(50);
echo $total; // Должно вывести 150
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Исправьте доступ к глобальной переменной

id: 39001_task3

В коде есть ошибка при попытке использовать глобальную переменную. Исправьте строку с ошибкой.

Найдите ошибку и исправьте
<?php
$price = 200;
$discount = 20;
 
function calculateFinalPrice() {
    $GLOBALS[$price] = $GLOBALS['price'] - $GLOBALS['discount'];
    return $GLOBALS['price'];
}
 
echo calculateFinalPrice();
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Соберите функцию с global

id: 39001_task4

Соберите функцию incrementCounter(), которая увеличивает глобальный счетчик на 1 и возвращает его новое значение.

Перетяните в правильном порядке строки из одного блока в другой
echo incrementCounter();
function incrementCounter() {
$counter++;
<?php
}
return $counter;
$counter = 5;
global $counter;
echo $counter++;
function increment($counter) {
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

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

id: 39001_task5

Что выведет этот код после трех вызовов функции? Обратите внимание на использование static.

Что должно получиться?
<?php
function counter() {
    static $count = 0;
    $count++;
    echo $count . " ";
}

counter();
counter();
counter();
?>
Сообщения
Проверить
Показать подсказку

Способы доступа к глобальным переменным

id: 39001_task6

Сопоставьте описания способов работы с глобальными переменными с примерами кода.

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
Делает глобальную переменную доступной в функции
Суперглобальный массив со всеми глобальными переменными
Передача переменной по ссылке в функцию
Сохраняет значение между вызовами функции
function test(&$var) { $var++; }
global $myVar;
static $counter = 0;
$GLOBALS['myVar']
Сообщения
Проверить
Показать подсказку

Глобальные переменные через $GLOBALS

id: 39001_task7

Заполните пропуски, используя массив $GLOBALS для работы с глобальными переменными username и score.

Нужно правильно расставить в пропуски предложенные варианты
<?php
$username = "Player1";
$score = 0;

function updateScore($points) {
    input1S['input2S'] += $points;
    echo input3S['username'] . ": " . $GLOBALS['input4S'];
}

updateScore(100);
?>
$GLOBALS
$GLOBALS
score
score
username
global
$score
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Множественные глобальные переменные

id: 39001_task8

В коде неправильно объявлены глобальные переменные. Исправьте ошибку в объявлении.

Найдите ошибку и исправьте
<?php
$x = 10;
$y = 20;
$z = 30;
 
function calculate() {
    global $x $y $z;
    return $x + $y + $z;
}
 
echo calculate();
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Локальная переменная скрывает глобальную

id: 39001_task9

Определите результат выполнения кода. Обратите внимание на приоритет локальных переменных.

Выберите правильный вариант ответа
<?php
$message = "Global";

function showMessage() {
    $message = "Local";
    global $message;
    echo $message;
}

showMessage();
?>
Сообщения
Проверить
Показать подсказку

Передача по ссылке vs global

id: 39001_task10

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

Заполните пропуски
<?php
$globalVar = 100;
$localVar = 50;

function modifyVars(input1S$param) {
    global input2S;
    $param *= 2;
    $globalVar -= 10;
}

modifyVars($localVar);
echo "Local: $localVar, Global: $globalVar";
// Должно вывести: Local: 100, Global: 90
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Комбинация static и global

id: 39001_task11

Проанализируйте код с использованием static и global. Что выведется после всех вызовов?

Что должно получиться?
<?php
$multiplier = 2;

function calculate() {
    global $multiplier;
    static $base = 5;
    $base += 10;
    return $base * $multiplier;
}

echo calculate() . " ";
$multiplier = 3;
echo calculate();
?>
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру