
# Sadarbspēja

Phasis darbojas tajā pašā PHP procesā, kurā darbojas jūsu lietotne, tāpēc vērtības pārvietojas starp PHP un JavaScript bez JSON, caurulēm vai otras izpildvides. Tās tiek pārvietotas, veicot **pārveidi**: skalārie tipi tiek kartēti uz JS primitīviem tipiem, PHP masīvi tiek kopēti jaunos JS masīvos un objektos, bet JS rezultāti tiek kopēti atpakaļ uz PHP masīviem. JS veiktās izmaiņas pārveidotajā masīvā nav redzamas PHP masīvā. Izņēmums ir PHP izsaucamie objekti, kas paliek aktīvi: tie kļūst par JS funkcijām, kas izsauc PHP tieši.

Šajā sadaļā aplūkoti noteikumi.

## Lapas

- **[Vērtības](https://phasis.inline0.dev/lv/docs/interop/values)** — pārveides tabulas abos virzienos: skaitļi, virknes, Būla vērtības, null/undefined, masīvi, objekti un vērtības, kuras nevar pārveidot.
- **[Resursdatora funkcijas](https://phasis.inline0.dev/lv/docs/interop/host-functions)** — piesaistiet PHP `callable` kā JS funkciju, izmantojot `$engine->setGlobal()`. Argumentu pārveide, atgrieztās vērtības un izņēmumu apstrāde.
- **[Koplietojami objekti](https://phasis.inline0.dev/lv/docs/interop/shared-objects)** — kas notiek, ja šodien nododat PHP objektu JS (tas tiek saņemts kā `undefined`), un kā atklāt PHP stāvokli un darbības, izmantojot masīvus un slēgtās funkcijas.
- **[Fetch transports](https://phasis.inline0.dev/lv/docs/interop/fetch-transport)** — aizstājiet noklusējuma `ext-curl` HTTP aizmugursistēmu ar Guzzle, Symfony HttpClient, testa aizstājēju vai visu bloķējošu transportu. Iekļauts arī politikas āķis atļauto saraksta veidošanai, galveņu ievietošanai un piesaistei katram nomniekam.
- **[Sīkdatņu krātuve](https://phasis.inline0.dev/lv/docs/interop/cookie-jar)** — pievienojiet `get(url)`/`set(url, header)` krātuvi, lai saglabātu sīkdatnes starp izgūšanas darbībām. Atmiņā, Symfony BrowserKit vai JS pusē esošā `Map`.
- **[AbortController lietojuma paraugi](https://phasis.inline0.dev/lv/docs/interop/abort-patterns)** — taimauts, sacensība, izplatīšana, `AbortSignal.any` / `.timeout` un tas, kā pielāgots PHP transports pārsūtīšanas laikā pārbauda signālu.

## Īss piemērs

```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
```

## Skatiet arī

- [API atsauce](https://phasis.inline0.dev/lv/docs/api) — pilns `Phasis\Engine` iespēju klāsts.
- [Tīmekļa API](https://phasis.inline0.dev/lv/docs/compatibility/web-apis) — Web Platform Pack un Fetch Pack darbojas virs viena un tā paša sadarbspējas slāņa.
