
# 相互運用

Phasisはアプリケーションと同じPHPプロセスで実行されるため、PHPとJavaScriptの間で値をJSON、パイプ、別のランタイムを使わずに受け渡せます。値は**変換**によって受け渡されます。スカラー値はJSプリミティブに対応し、PHP配列は新しいJS配列とオブジェクトにコピーされ、JSの結果はPHP配列にコピーされます。変換後の配列にJSが加えた変更は、PHP配列には反映されません。例外として、PHPの呼び出し可能オブジェクトは有効なまま残り、PHPを直接呼び出すJS関数になります。

このセクションではルールを説明します。

## ページ

- **[値](https://phasis.inline0.dev/ja/docs/interop/values)** — 双方向の変換表です。数値、文字列、ブール値、null/undefined、配列、オブジェクト、変換できない値を扱います。
- **[ホスト関数](https://phasis.inline0.dev/ja/docs/interop/host-functions)** — PHPの`callable`を`$engine->setGlobal()`経由でJS関数としてバインドします。引数の変換、戻り値、例外の挙動について説明します。
- **[共有オブジェクト](https://phasis.inline0.dev/ja/docs/interop/shared-objects)** — PHPオブジェクトをJSに渡すと現在どうなるか（`undefined`として届きます）、配列とクロージャを使ってPHPの状態や振る舞いを公開する方法を説明します。
- **[Fetchトランスポート](https://phasis.inline0.dev/ja/docs/interop/fetch-transport)** — デフォルトの`ext-curl` HTTPバックエンドを、Guzzle、Symfony HttpClient、モック、またはすべて拒否する実装に切り替えます。許可リスト、ヘッダー挿入、テナントごとのバインドに使うポリシーフックも扱います。
- **[Cookie jar](https://phasis.inline0.dev/ja/docs/interop/cookie-jar)** — `get(url)`/`set(url, header)`のjarをマウントして、fetch間でCookieを保持します。インメモリ、Symfony BrowserKit、JS側の`Map`を利用できます。
- **[AbortControllerのパターン](https://phasis.inline0.dev/ja/docs/interop/abort-patterns)** — タイムアウト、競合、伝播、`AbortSignal.any` / `.timeout`、およびカスタムPHPトランスポートが転送中にシグナルをポーリングする方法を説明します。

## 使用例

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

## 関連項目

- [APIリファレンス](https://phasis.inline0.dev/ja/docs/api) — `Phasis\Engine`の全機能。
- [Web API](https://phasis.inline0.dev/ja/docs/compatibility/web-apis) — Web Platform PackとFetch Packは、同じ相互運用レイヤーの上で動作します。
