Передача по ссылке
Часть раздела Логика и управление потоком путешествия по 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 изменять её напрямую.
Этот метод особенно полезен, когда вам нужно, чтобы функция изменила несколько переменных, или когда вы работаете с большими структурами данных, копирование которых было бы неэффективным.
Задание
ЛегкоСоздайте 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;
?>В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
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'Итоги: Сортировка таблицы лидеровПотренируйтесь самостоятельно: Онлайн-компилятор PHP