Передача по ссылке
Часть раздела Логика и управление потоком путешествия по PHP на Coddy — урок 7 из 68.
По умолчанию, когда вы передаете переменную в функцию в PHP, функция получает копию значения этой переменной. Это означает, что любые изменения, внесенные внутри функции, не влияют на исходную переменную вне функции.
Однако иногда вам нужно, чтобы функция изменяла исходную переменную напрямую. Здесь на помощь приходит передача по ссылке. Добавляя амперсанд (&) перед именем параметра в определении функции, вы указываете PHP передавать саму переменную вместо её копии:
<?php
function doubleValue(&$number) {
$number = $number * 2;
}
$value = 10;
doubleValue($value);
echo $value; // Вывод: 20
?>Обратите внимание, как $value изменилось с 10 на 20, хотя мы ничего не возвращали из функции. Параметр &$number создает прямую связь с исходной переменной $value, позволяя функции изменять её напрямую.
Этот метод особенно полезен, когда вам нужно, чтобы функция изменяла несколько переменных, или при работе с большими структурами данных, где копирование было бы неэффективным.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Задание
ЛегкоСоздайте функцию с именем updateInventory, которая принимает три параметра: ссылку на переменную количества, количество для добавления и количество для удаления. Функция должна изменять исходное количество, прибавляя первое значение и вычитая второе.
Вы получите три входных значения: начальное количество, количество для добавления и количество для удаления. Прочитайте все три входных значения, создайте переменную с начальным количеством, вызовите функцию updateInventory, передав количество по ссылке вместе со значениями для добавления и удаления, и выведите обновленное количество.
Формат входных данных: Три строки — первая строка содержит начальное количество (число), вторая строка содержит количество для добавления (число), третья строка содержит количество для удаления (число).
Ожидаемый результат: Обновленное количество после добавления и удаления.
Шпаргалка
По умолчанию PHP передает переменные в функции по значению (копию). Чтобы изменить исходную переменную, используйте передачу по ссылке, добавив амперсанд (&) перед именем параметра:
<?php
function doubleValue(&$number) {
$number = $number * 2;
}
$value = 10;
doubleValue($value);
echo $value; // Вывод: 20
?>Параметр &$number создает прямую связь с исходной переменной, позволяя функции изменять ее без возврата значения. Это полезно для изменения нескольких переменных или эффективной работы с большими структурами данных.
Попробуйте сами
<?php
// Чтение входных данных
$initialQuantity = intval(fgets(STDIN));
$amountToAdd = intval(fgets(STDIN));
$amountToRemove = intval(fgets(STDIN));
// Создание переменной количества
$quantity = $initialQuantity;
// TODO: Создайте здесь функцию updateInventory, которая принимает параметр по ссылке
// TODO: Вызовите функцию updateInventory с переменной quantity по ссылке
// Вывод обновленного количества
echo $quantity;
?>В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутые функции
Анонимные функцииЗамыкания и 'use'Стрелочные функцииCallback-функцииИспользование 'call_user_func'Функции переменныхПередача по ссылкеРекурсивные функцииИтоги: ассорти из функций4Многомерные массивы
Создание 2D-массиваДоступ к элементам 2D-массиваИзменение элементов 2D-массиваИтерация с вложенными цикламиДвумерные ассоциативные массивыИтоги: Упражнение «Простая сетка»2Продвинутая работа с массивами
Добавление с помощью 'array_push'Удаление с помощью 'array_pop'Добавление с помощью 'array_unshift'Удаление с помощью 'array_shift'Слияние индексных массивовСлияние ассоциативных массивовИзвлечение с помощью 'array_slice'Поиск значений с 'in_array'Поиск ключей с 'array_search'Итоги: Упражнение «Плейлист»3Сортировка массивов
Сортировка индексных массивов по возрастаниюСортировка индексных массивов по убываниюСортировка ассоциативных массивов по значениюСортировка ассоциативных массивов по ключуСортировка в естественном порядкеПользовательская сортировка с помощью 'usort'Итоги: Сортировка таблицы лидеров