Menu
Coddy logo textTech

Przekazywanie przez referencję

Część sekcji Logika i przepływ programu ścieżki PHP w Coddy. Lekcja 7 z 68.

Domyślnie, gdy przekazujesz zmienną do funkcji w PHP, funkcja otrzymuje kopię wartości tej zmiennej. Oznacza to, że wszelkie zmiany wprowadzone wewnątrz funkcji nie wpływają na oryginalną zmienną poza funkcją.

Czasami jednak chcesz, aby funkcja bezpośrednio modyfikowała oryginalną zmienną. Właśnie wtedy przydaje się przekazywanie przez referencję. Dodając ampersand (&) przed nazwą parametru w definicji funkcji, informujesz PHP, aby przekazał rzeczywistą zmienną zamiast jej kopii:

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

$value = 10;
doubleValue($value);
echo $value;  // Wyświetla: 20
?>

Zauważ, że $value zmieniło się z 10 na 20, mimo że funkcja niczego nie zwróciła. Parametr &$number tworzy bezpośrednie połączenie z oryginalną zmienną $value, umożliwiając funkcji jej bezpośrednią modyfikację.

Ta technika jest szczególnie przydatna, gdy potrzebujesz funkcji, która modyfikuje wiele zmiennych, lub gdy pracujesz z dużymi strukturami danych, których kopiowanie byłoby nieefektywne.

challenge icon

Wyzwanie

Łatwy

Utwórz funkcję o nazwie updateInventory, która przyjmuje trzy parametry: referencję do zmiennej przechowującej ilość, ilość do dodania oraz ilość do odjęcia. Funkcja powinna zmodyfikować pierwotną ilość, dodając pierwszą wartość i odejmując drugą.

Otrzymasz trzy dane wejściowe: początkową ilość, ilość do dodania oraz ilość do odjęcia. Odczytaj wszystkie trzy dane wejściowe, utwórz zmienną z początkową ilością, wywołaj funkcję updateInventory, przekazując ilość przez referencję wraz z wartościami do dodania i odjęcia, a następnie wypisz zaktualizowaną ilość.

Format danych wejściowych: Trzy wiersze — pierwszy wiersz zawiera początkową ilość (liczbę), drugi wiersz zawiera ilość do dodania (liczbę), trzeci wiersz zawiera ilość do odjęcia (liczbę)

Oczekiwany wynik: Zaktualizowana ilość po dodaniu i odjęciu

Spróbuj swoich sił

<?php
// Odczytaj dane wejściowe
$initialQuantity = intval(fgets(STDIN));
$amountToAdd = intval(fgets(STDIN));
$amountToRemove = intval(fgets(STDIN));

// Utwórz zmienną quantity
$quantity = $initialQuantity;

// TODO: Utwórz tutaj funkcję updateInventory, która przyjmuje parametr przez referencję

// TODO: Wywołaj funkcję updateInventory, przekazując quantity przez referencję

// Wyświetl zaktualizowaną wartość quantity
echo $quantity;
?>
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator PHP online