
# Interoperabilitate

Phasis rulează în același proces PHP ca aplicația dumneavoastră, astfel că valorile trec între PHP și JavaScript fără JSON, pipe-uri sau un al doilea mediu de execuție. Trec prin **conversie**: valorile scalare devin primitive JS, tablourile PHP sunt copiate în tablouri și obiecte JS noi, iar rezultatele JS sunt copiate înapoi în tablouri PHP. Modificările făcute de JS într-un tablou convertit nu sunt vizibile în tabloul PHP. Funcțiile apelabile PHP sunt excepția care rămâne activă: devin funcții JS care apelează direct în PHP.

Această secțiune prezintă regulile.

## Pagini

- **[Valori](https://phasis.inline0.dev/ro/docs/interop/values)** — tabelele de conversie în ambele direcții: numere, șiruri, valori booleene, null/undefined, tablouri, obiecte și valorile care nu se convertesc.
- **[Funcții gazdă](https://phasis.inline0.dev/ro/docs/interop/host-functions)** — asociați PHP `callable` ca funcție JS prin `$engine->setGlobal()`. Conversia argumentelor, valorile returnate și comportamentul excepțiilor.
- **[Obiecte partajate](https://phasis.inline0.dev/ro/docs/interop/shared-objects)** — ce se întâmplă când transmiteți un obiect PHP către JS în prezent (ajunge ca `undefined`) și cum să expuneți starea și comportamentul PHP folosind în schimb tablouri și funcții closure.
- **[Transport fetch](https://phasis.inline0.dev/ro/docs/interop/fetch-transport)** — înlocuiți backendul implicit `ext-curl` HTTP cu Guzzle, Symfony HttpClient, un mock sau blocarea tuturor cererilor. Include funcția de politică pentru liste de permisiuni, injectarea antetelor și asocierea per client.
- **[Recipient de cookie-uri](https://phasis.inline0.dev/ro/docs/interop/cookie-jar)** — atașați un recipient `get(url)`/`set(url, header)` pentru a păstra cookie-urile între cereri fetch. În memorie, Symfony BrowserKit sau un JS-side `Map`.
- **[Tipare AbortController](https://phasis.inline0.dev/ro/docs/interop/abort-patterns)** — timp de așteptare, cursă, propagare, `AbortSignal.any` / `.timeout` și modul în care un transport PHP personalizat verifică semnalul în timpul transferului.

## Exemplu rapid

```php
$engine = new Phasis\Engine();

// 1. Bind a PHP callable as a JS function
$engine->setGlobal('greet', fn (string $name) => "Hello, $name!");
echo $engine->eval('greet("world")');  // → Hello, world!

// 2. Let JS change PHP state through a closure
$total = 0;
$engine->setGlobal('add', function (int $n) use (&$total): void { $total += $n; });
$engine->eval('add(2); add(3)');
echo $total;  // → 5

// 3. Call a JS function from PHP
$engine->eval('function add(a, b) { return a + b; }');
echo $engine->call('add', 2, 3);  // → 5
```

## Consultați și

- [API referință](https://phasis.inline0.dev/ro/docs/api) — întreaga interfață `Phasis\Engine`.
- [API-uri web](https://phasis.inline0.dev/ro/docs/compatibility/web-apis) — Web Platform Pack și Fetch Pack folosesc același strat de interoperabilitate.
