
# Prepojenie

Phasis beží v tom istom procese PHP ako vaša aplikácia, takže hodnoty prechádzajú medzi PHP a JavaScript bez JSON, rúr alebo druhého behového prostredia. Prenášajú sa **prevodom**: skalárne hodnoty sa mapujú na primitívne hodnoty JS, polia PHP sa kopírujú do nových polí a objektov JS a výsledky JS sa kopírujú späť do polí PHP. Zmena vykonaná v poli JS sa v poli PHP neprejaví. Výnimkou sú volateľné objekty PHP, ktoré zostávajú aktívne: stanú sa funkciami JS volajúcimi priamo do PHP.

Táto časť opisuje pravidlá.

## Stránky

- **[Hodnoty](https://phasis.inline0.dev/sk/docs/interop/values)** — tabuľky prevodu oboma smermi: čísla, reťazce, logické hodnoty, null/undefined, polia, objekty a hodnoty, ktoré sa previesť nedajú.
- **[Funkcie hostiteľa](https://phasis.inline0.dev/sk/docs/interop/host-functions)** — priraďte PHP `callable` ako funkciu JS cez `$engine->setGlobal()`. Prevod argumentov a návratových hodnôt a správanie výnimiek.
- **[Zdieľané objekty](https://phasis.inline0.dev/sk/docs/interop/shared-objects)** — čo sa dnes stane, keď odovzdáte objekt PHP do JS (dostane sa tam ako `undefined`) a ako namiesto toho sprístupniť stav a správanie PHP pomocou polí a uzávierok.
- **[Transport fetch](https://phasis.inline0.dev/sk/docs/interop/fetch-transport)** — nahraďte predvolený backend `ext-curl` HTTP za Guzzle, Symfony HttpClient, napodobeninu alebo úplné blokovanie. Navyše hák politiky na zoznamy povolených, vkladanie hlavičiek a priraďovanie podľa nájomcu.
- **[Úložisko súborov cookie](https://phasis.inline0.dev/sk/docs/interop/cookie-jar)** — pripojte úložisko `get(url)`/`set(url, header)` na uchovávanie súborov cookie medzi požiadavkami fetch. V pamäti, Symfony BrowserKit alebo úložisko `Map` na strane JS.
- **[Vzory používania AbortController](https://phasis.inline0.dev/sk/docs/interop/abort-patterns)** — časové limity, preteky, propagácia, `AbortSignal.any` / `.timeout` a spôsob, akým vlastný transport PHP kontroluje signál počas prenosu.

## Rýchly príklad

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

## Pozrite si aj

- [API referencia](https://phasis.inline0.dev/sk/docs/api) — celé `Phasis\Engine` rozhranie.
- [Web APIs](https://phasis.inline0.dev/sk/docs/compatibility/web-apis) — Web Platform Pack a Fetch Pack využívajú rovnakú vrstvu interoperability.
