Closure e 'use'
Fa parte della sezione Logica e flusso del percorso PHP di Coddy. Lezione 2 di 68.
Per impostazione predefinita, le funzioni anonime possono accedere solo alle variabili che vengono passate loro come parametri. Ma cosa succede se hai bisogno che la tua closure acceda a una variabile dello scope circostante? È qui che entra in gioco la parola chiave use.
La parola chiave use permette a una funzione anonima di «catturare» le variabili dal suo ambito genitore e di usarle al suo interno:
<?php
$message = "Welcome";
$greeting = function($name) use ($message) {
echo $message . ", " . $name . "!";
};
$greeting("Bob"); // Stampa: Welcome, Bob!
?>Nota che $message è definita fuori dalla funzione, ma includendo use ($message) dopo l'elenco dei parametri, la closure può accedere a quella variabile e usarla. Puoi acquisire più variabili separandole con virgole: use ($var1, $var2).
Questa funzionalità rende le chiusure molto più potenti, consentendo loro di lavorare con i dati del contesto circostante pur mantenendo la flessibilità delle funzioni anonime.
Sfida
FacileCrea una funzione anonima che acquisisca una percentuale di sconto dall'ambito circostante usando la parola chiave use. La funzione deve accettare un prezzo come parametro e restituire il prezzo finale dopo aver applicato lo sconto.
Riceverai due input: la percentuale di sconto e il prezzo originale. Leggi entrambi gli input, crea una closure che acquisisca la percentuale di sconto, chiama la closure con il prezzo e stampa il prezzo finale scontato.
Formato dell'input: Due righe: la prima contiene la percentuale di sconto (un numero), la seconda contiene il prezzo originale (un numero che può contenere decimali)
Output previsto: Il prezzo finale dopo aver applicato lo sconto
Provalo tu
<?php
// Leggi i valori in input
$discount = floatval(fgets(STDIN));
$price = floatval(fgets(STDIN));
// TODO: Crea una funzione anonima che acquisisca la percentuale di sconto usando 'use'
// La funzione deve accettare un parametro per il prezzo e restituire il prezzo finale dopo lo sconto
// TODO: Chiama la closure con il prezzo e memorizza il risultato
// Stampa il prezzo finale
echo $finalPrice;
?>Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Funzioni avanzate
Funzioni anonimeClosure e 'use'Funzioni frecciaFunzioni callbackUso di 'call_user_func'Funzioni variabiliPassaggio per riferimentoFunzioni ricorsiveRiepilogo: carrellata di funzioni4Array multidimensionali
Creare un array 2DAccedere agli elementi di un array 2DModificare gli elementi di un array 2DIterare con cicli annidatiArray associativi 2DRipasso: esercizio con una griglia semplice2Manipolazioni avanzate degli array
Aggiungere con 'array_push'Rimuovere con 'array_pop'Aggiungere con 'array_unshift'Rimuovere con 'array_shift'Unire array indicizzatiUnire array associativiEstrarre con 'array_slice'Valori con 'in_array'Chiavi con 'array_search'Riepilogo: esercizio playlist3Ordinare gli array
Ordina gli array indicizzati in ordine crescenteOrdina gli array indicizzati in ordine decrescenteOrdina gli array associativi per valoreOrdina gli array associativi per chiaveOrdinamento naturaleOrdinamento personalizzato con 'usort'Ripasso: ordinamento della classificaEsercitati da solo: Compilatore PHP online