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
callablesebagai 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-curlHTTP 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 sisiMap. - 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.