Samverkan mellan språk
Phasis körs i samma process av typen PHP som din applikation, så värden passerar mellan PHP och JavaScript utan JSON, pipes eller en andra runtime. De passerar genom konvertering: skalärer blir grundvärden av typen JS, arrayer och objekt av typen PHP kopieras till nya arrayer och objekt av typen JS och resultat av typen JS kopieras tillbaka till arrayer av typen PHP. En ändring som JS gör i en konverterad array syns inte i arrayen av typen PHP. Funktioner av typen PHP är undantaget som förblir aktiva: de blir funktioner av typen JS som anropar direkt i PHP.
Det här avsnittet beskriver reglerna.
Sidor
- Värden — konverteringstabeller i båda riktningarna: tal, strängar, booleska värden, null/undefined, arrayer, objekt och värden som inte kan konverteras.
- Värdfunktioner — koppla PHP
callabletill en funktion av typen JS via$engine->setGlobal(). Konvertering av argument och returvärden samt hur undantag hanteras. - Delade objekt — vad som händer när du skickar ett objekt av typen PHP till JS i dag (det blir
undefined) och hur du i stället exponerar tillstånd och beteende av typen PHP med arrayer och slutningar. - Fetch-transport — byt ut standardbackend för
ext-curlHTTP mot Guzzle, Symfony HttpClient, en mock eller en transport som nekar allt. Även en hook för principer som hanterar tillåtelselistor, tillägg av headers och koppling per klient. - Cookie-lagring — koppla in en lagring av typen
get(url)/set(url, header)för att spara cookies mellan hämtningar. I minnet, Symfony BrowserKit eller en lagring på sidan JS av typenMap. - Mönster för AbortController — tidsgräns, kapplöpning, propagering,
AbortSignal.any/.timeoutoch hur en anpassad transport av typen PHP kontrollerar signalen under överföringen.
Snabbexempel
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
Se även
- API-referens — hela gränssnittet för
Phasis\Engine. - Web APIs — Web Platform Pack och Fetch Pack använder samma samverkanslager.