Sobes.tech
Middle

Care este diferența dintre closures în PHP și JavaScript?

sobes.tech AI

Răspuns de la AI

Diferența cheie constă în modul în care sunt create și utilizate:

  • PHP: Închiderile sunt obiecte ale clasei Closure. Sunt create folosind cuvântul cheie function (pentru funcții anonime) și pot importa explicit variabile din domeniul părinte folosind cuvântul cheie use. Variabilele sunt importate implicit prin valoare, dar se poate folosi & pentru import prin referință.
  • JavaScript: Închiderile sunt create în mod natural atunci când se definește o funcție în interiorul altei funcții. Funcția internă are acces la variabilele funcției exterioare și la domeniul său. Variabilele sunt capturate prin referință (sau prin valoare pentru tipurile primitive și copiere).

În PHP, închiderile sunt mai explicite datorită sintaxei use, în timp ce în JavaScript acest mecanism este mai transparent pentru dezvoltator.

Exemplu în PHP:

<?php
function outerFunction($x) {
    return function() use ($x) { // Import explicit al lui $x
        echo $x;
    };
}

$closure = outerFunction("Salut");
$closure(); // Afișează: Salut

Exemplu în JavaScript:

function outerFunction(x) {
  return function() { // Acces implicit la x
    console.log(x);
  };
}

const closure = outerFunction("Salut");
closure(); // Afișează: Salut