Hoppa till innehåll

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 callable till 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-curl HTTP 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 typen Map.
  • Mönster för AbortController — tidsgräns, kapplöpning, propagering, AbortSignal.any / .timeout och 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.