Interoperabiliteit
Phasis draait in hetzelfde proces van PHP als je applicatie, dus waarden gaan tussen PHP en JavaScript zonder JSON, pipes of een tweede runtime. Ze worden uitgewisseld via conversie: scalaire waarden worden omgezet naar primitieven van JS, arrays van PHP worden gekopieerd naar nieuwe arrays en objecten van JS, en resultaten van JS worden teruggekopieerd naar arrays van PHP. Wijzigingen die JS aanbrengt in een geconverteerde array, zijn niet zichtbaar in de array van PHP. Callables van PHP vormen de uitzondering die actief blijft: ze worden functies van JS die rechtstreeks aanroepen doen in PHP.
In dit gedeelte vind je de regels.
Pagina's
- Waarden — de conversietabellen in beide richtingen: getallen, tekenreeksen, booleans, null/undefined, arrays, objecten en waarden die niet kunnen worden geconverteerd.
- Hostfuncties — bind PHP
callableals functie van JS via$engine->setGlobal(). Conversie van argumenten, retourwaarden en de afhandeling van uitzonderingen. - Gedeelde objecten — wat er gebeurt wanneer je vandaag een object van PHP aan JS doorgeeft (het komt aan als
undefined), en hoe je PHP-status en -gedrag beschikbaar maakt met arrays en closures. - Fetch-transport — vervang de standaardbackend voor
ext-curlHTTP door Guzzle, Symfony HttpClient, een mock of een transport dat alles weigert. Ook de beleidsfunctie voor allowlisting, het toevoegen van headers en binding per tenant. - Cookiepot — koppel een pot van
get(url)/set(url, header)om cookies tussen fetches te bewaren. In het geheugen, Symfony BrowserKit of een JS-Map. - Patronen voor AbortController — time-out, race, propagatie,
AbortSignal.any/.timeouten hoe een aangepast transport van PHP het signaal tijdens de overdracht controleert.
Snel voorbeeld
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
Zie ook
- API-referentie — de volledige
Phasis\Engine-interface. - Web-API's — Web Platform Pack en Fetch Pack bouwen voort op dezelfde interoplaag.