Lewati ke konten

Interoperabilitas

Phasis berjalan dalam proses PHP yang sama dengan aplikasi Anda, sehingga nilai berpindah antara PHP dan JavaScript tanpa JSON, pipe, atau runtime kedua. Perpindahan dilakukan melalui konversi: skalar dipetakan ke primitif JS, array PHP disalin menjadi array dan objek JS baru, lalu hasil JS disalin kembali ke array PHP. Perubahan yang dibuat JS pada array hasil konversi tidak terlihat pada array PHP. Callable PHP adalah pengecualian yang tetap aktif: callable tersebut menjadi fungsi JS yang langsung memanggil PHP.

Bagian ini membahas aturan-aturannya.

Halaman

  • Nilai — tabel konversi untuk kedua arah: angka, string, boolean, null/undefined, array, objek, dan nilai yang tidak dapat dikonversi.
  • Fungsi host — ikat PHP callable sebagai fungsi JS melalui $engine->setGlobal(). Konversi argumen, nilai kembalian, dan cara exception ditangani.
  • Objek bersama — apa yang terjadi saat Anda memberikan objek PHP ke JS saat ini (objek tersebut diterima sebagai undefined), serta cara mengekspos status dan perilaku PHP menggunakan array dan closure.
  • Transport Fetch — ganti backend ext-curl HTTP bawaan dengan Guzzle, Symfony HttpClient, mock, atau konfigurasi tolak semua. Termasuk hook kebijakan untuk allowlist, injeksi header, dan pengikatan per tenant.
  • Cookie jar — pasang jar get(url)/set(url, header) untuk menyimpan cookie di antara fetch. Dalam memori, Symfony BrowserKit, atau JS di sisi Map.
  • Pola AbortController — timeout, race, propagasi, AbortSignal.any / .timeout, dan cara transport PHP khusus memeriksa sinyal di tengah transfer.

Contoh singkat

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

Lihat juga

  • API referensi — seluruh permukaan Phasis\Engine.
  • API Web — Web Platform Pack dan Fetch Pack menggunakan lapisan interoperabilitas yang sama.