Menu
Coddy logo textTech

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

Часть раздела Логика и управление потоком путешествия по PHP на Coddy. Урок 7 из 68.

По умолчанию, когда ты передаёшь variable в function в PHP, function получает копию значения этой variable. Это означает, что любые изменения, внесённые внутри function, не влияют на исходную variable за пределами function.

Однако иногда нужно, чтобы функция напрямую изменяла исходную variable. Здесь используется передача по reference. Добавив амперсанд (&) перед именем parameter в определении функции, вы указываете PHP передавать саму variable, а не копию:

<?php
function doubleValue(&$number) {
    $number = $number * 2;
}

$value = 10;
doubleValue($value);
echo $value;  // Выводит: 20
?>

Обратите внимание, как $value изменилось с 10 на 20, хотя мы ничего не вернули из function. Параметр &$number создаёт прямую связь с исходной переменной $value, позволяя function изменять её напрямую.

Этот метод особенно полезен, когда вам нужно, чтобы функция изменила несколько переменных, или когда вы работаете с большими структурами данных, копирование которых было бы неэффективным.

challenge icon

Задание

Легко

Создайте function с именем updateInventory, которая принимает три parameter: ссылку на quantity variable, amount для add и amount для remove. function должна изменить исходное значение quantity, добавив первое amount и вычтя второе amount.

Вы получите три inputs: начальное значение quantity, amount для add и amount для remove. Read все три inputs, создайте variable с начальным значением quantity, вызовите function updateInventory, передав quantity по reference вместе с величинами add и remove, и выведите обновлённое значение quantity.

Формат ввода: Три строки — первая строка содержит начальное значение quantity (number), вторая строка содержит amount для add (number), третья строка содержит amount для remove (number)

Ожидаемый результат: Обновлённое значение quantity после добавления и удаления

Попробуйте сами

<?php
// Считать входные данные
$initialQuantity = intval(fgets(STDIN));
$amountToAdd = intval(fgets(STDIN));
$amountToRemove = intval(fgets(STDIN));

// Создать переменную quantity
$quantity = $initialQuantity;

// TODO: Создайте функцию updateInventory здесь, которая принимает параметр по ссылке

// TODO: Вызовите функцию updateInventory, передав quantity по ссылке

// Вывести обновлённое количество
echo $quantity;
?>
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор PHP