Variabili PHP in funzioni anonime


119

Stavo giocando con le funzioni anonime in PHP e mi sono reso conto che non sembrano raggiungere variabili al di fuori di esse. C'è un modo per aggirare questo problema?

Esempio:

$variable = "nothing";

functionName($someArgument, function() {
  $variable = "something";
});

echo $variable;  //output: "nothing"

Questo produrrà "niente". C'è un modo in cui la funzione anonima può accedere al $variable?

Risposte:


277

Sì, usa una chiusura :

functionName($someArgument, function() use(&$variable) {
  $variable = "something";
});

Si noti che per poter modificare $variablee recuperare il valore modificato al di fuori dell'ambito della funzione anonima, è necessario fare riferimento a esso nella chiusura utilizzando &.


È nuovo! È la sintassi che è nuova in PHP 5.3.
Rocket Hazmat

1
@Rocket Quindi, per essere onesti, è la vera sintassi della funzione anonima (al contrario di create_function()) e la useparola chiave è documentata (male) nella stessa pagina del documento che le descrive.
DaveRandom

4
Nota rapida per coloro che potrebbero non saperlo: puoi rilasciare &quando si passa un oggetto, poiché sono sempre passati per riferimento ... e non dimenticare il suggerimento sul tipo :) Ad esempio:function() use (PDO $pdo) {
keyboardSmasher

@Alliswell No, è solo per gli oggetti, altrimenti è necessario passare per riferimento per modificare la variabile. Vedi questo esempio .
nickb
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.