Sobes.tech
Middle

Qual è la differenza tra closure in PHP e JavaScript?

sobes.tech AI

Risposta dell'AI

La differenza principale risiede nel modo in cui vengono create e utilizzate:

  • PHP: Le closure sono oggetti della classe Closure. Vengono create usando la parola chiave function (per funzioni anonime) e possono importare esplicitamente variabili dall'ambito superiore usando la parola chiave use. Le variabili vengono importate per valore di default, ma si può usare & per importarle per riferimento.
  • JavaScript: Le closure vengono create naturalmente definendo una funzione all'interno di un'altra funzione. La funzione interna ha accesso alle variabili della funzione esterna e al suo ambito. Le variabili vengono catturate per riferimento (o per valore in tipi primitivi e copia).

In PHP, le closure sono più esplicite grazie alla sintassi use, mentre in JavaScript questo meccanismo è più trasparente per lo sviluppatore.

Esempio in PHP:

<?php
function outerFunction($x) {
    return function() use ($x) { // Importazione esplicita di $x
        echo $x;
    };
}

$closure = outerFunction("Ciao");
$closure(); // Output: Ciao

Esempio in JavaScript:

function outerFunction(x) {
  return function() { // Accesso implicito a x
    console.log(x);
  };
}

const closure = outerFunction("Ciao");
closure(); // Output: Ciao