Domknięcia i „use”
Część sekcji Logika i przepływ programu ścieżki PHP w Coddy. Lekcja 2 z 68.
Domyślnie funkcje anonimowe mogą uzyskiwać dostęp tylko do zmiennych przekazanych im jako parametry. Co jednak zrobić, jeśli chcesz, aby domknięcie miało dostęp do zmiennej z otaczającego zakresu? Właśnie tutaj przydaje się słowo kluczowe use.
Słowo kluczowe use pozwala domknięciu „przechwytywać” zmienne z zakresu nadrzędnego i używać ich wewnątrz funkcji:
<?php
$message = "Welcome";
$greeting = function($name) use ($message) {
echo $message . ", " . $name . "!";
};
$greeting("Bob"); // Wyświetla: Welcome, Bob!
?>Zwróć uwagę, że $message jest zdefiniowane poza funkcją, ale dzięki dodaniu use ($message) po liście parametrów domknięcie może uzyskać dostęp do tej zmiennej i jej używać. Możesz przechwycić wiele zmiennych, oddzielając je przecinkami: use ($var1, $var2).
Ta funkcja sprawia, że domknięcia są znacznie potężniejsze, umożliwiając im pracę z danymi z otaczającego kontekstu przy zachowaniu elastyczności funkcji anonimowych.
Wyzwanie
ŁatwyUtwórz funkcję anonimową, która przechwytuje procent rabatu z otaczającego zakresu za pomocą słowa kluczowego use. Funkcja powinna przyjmować cenę jako parametr i zwracać cenę końcową po zastosowaniu rabatu.
Otrzymasz dwa dane wejściowe: procent rabatu i cenę początkową. Odczytaj oba dane, utwórz domknięcie przechwytujące procent rabatu, wywołaj domknięcie z ceną i wypisz cenę końcową po rabacie.
Format danych wejściowych: Dwa wiersze — pierwszy wiersz zawiera procent rabatu (liczbę), a drugi wiersz zawiera cenę początkową (liczbę, która może zawierać część dziesiętną)
Oczekiwany wynik: Cena końcowa po zastosowaniu rabatu
Spróbuj swoich sił
<?php
// Odczytaj dane wejściowe
$discount = floatval(fgets(STDIN));
$price = floatval(fgets(STDIN));
// TODO: Utwórz funkcję anonimową, która przechwytuje procent rabatu za pomocą 'use'
// Funkcja powinna przyjmować parametr ceny i zwracać cenę końcową po rabacie
// TODO: Wywołaj funkcję anonimową z ceną i zapisz wynik
// Wyświetl cenę końcową
echo $finalPrice;
?>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