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.
Wyzwanie
ŁatwyUtwó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;
?>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
1Zaawansowane funkcje
Funkcje anonimoweDomknięcia i „use”Funkcje strzałkoweFunkcje zwrotneUżywanie „call_user_func”Funkcje zmiennePrzekazywanie przez referencjęFunkcje rekurencyjnePowtórka: przegląd funkcji4Tablice wielowymiarowe
Tworzenie tablicy 2DDostęp do elementów tablicy 2DModyfikowanie elementów tablicy 2DIterowanie z użyciem zagnieżdżonych pętliAsocjacyjne tablice 2DPodsumowanie: ćwiczenie z prostą siatką2Zaawansowane operacje na tablicach
Dodawanie za pomocą 'array_push'Usuwanie za pomocą 'array_pop'Dodawanie za pomocą 'array_unshift'Usuwanie za pomocą 'array_shift'Łączenie tablic indeksowanychŁączenie tablic asocjacyjnychWyodrębnianie za pomocą 'array_slice'Wyszukiwanie wartości za pomocą 'in_array'Wyszukiwanie kluczy za pomocą 'array_search'Podsumowanie: ćwiczenie z playlistą3Sortowanie tablic
Sortowanie tablic indeksowanych rosnącoSortowanie tablic indeksowanych malejącoSortowanie tablic asocjacyjnych według wartościSortowanie tablic asocjacyjnych według kluczaSortowanie w kolejności naturalnejSortowanie niestandardowe za pomocą 'usort'Podsumowanie: sortowanie tabeli wynikówPoćwicz samodzielnie: Kompilator PHP online