コンテンツへスキップ

相互運用

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

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

ページ

  • 値 — 双方向の変換表です。数値、文字列、ブール値、null/undefined、配列、オブジェクト、変換できない値を扱います。
  • ホスト関数 — PHPのcallableを$engine->setGlobal()経由でJS関数としてバインドします。引数の変換、戻り値、例外の挙動について説明します。
  • 共有オブジェクト — PHPオブジェクトをJSに渡すと現在どうなるか(undefinedとして届きます)、配列とクロージャを使ってPHPの状態や振る舞いを公開する方法を説明します。
  • Fetchトランスポート — デフォルトのext-curl HTTPバックエンドを、Guzzle、Symfony HttpClient、モック、またはすべて拒否する実装に切り替えます。許可リスト、ヘッダー挿入、テナントごとのバインドに使うポリシーフックも扱います。
  • Cookie jar — get(url)/set(url, header)のjarをマウントして、fetch間でCookieを保持します。インメモリ、Symfony BrowserKit、JS側のMapを利用できます。
  • AbortControllerのパターン — タイムアウト、競合、伝播、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リファレンス — Phasis\Engineの全機能。
  • Web API — Web Platform PackとFetch Packは、同じ相互運用レイヤーの上で動作します。