Interoperabilität
Phasis läuft im selben PHP-Prozess wie deine Anwendung. Daher wechseln Werte zwischen PHP und JavaScript ohne JSON, Pipes oder eine zweite Laufzeitumgebung. Der Austausch erfolgt durch Konvertierung: Skalare werden JS-Primitiven zugeordnet, PHP-Arrays werden in neue JS-Arrays und -Objekte kopiert und JS-Ergebnisse zurück in PHP-Arrays. Änderungen, die JS an einem konvertierten Array vornimmt, sind im PHP-Array nicht sichtbar. PHP-Aufrufbare bleiben als einzige live: Sie werden zu JS-Funktionen, die direkt PHP aufrufen.
Dieser Abschnitt behandelt die Regeln.
Seiten
- Werte – Konvertierungstabellen in beide Richtungen: Zahlen, Zeichenfolgen, Booleans, null/undefined, Arrays, Objekte und nicht konvertierbare Werte.
- Host-Funktionen – Binde PHP-
callableals JS-Funktion über$engine->setGlobal()ein. Argumentkonvertierung, Rückgabewerte und das Verhalten von Ausnahmen. - Gemeinsam genutzte Objekte – Was beim Übergeben eines PHP-Objekts an JS derzeit geschieht (es kommt als
undefinedan) und wie du stattdessen PHP-Zustand und -Verhalten mit Arrays und Closures bereitstellst. - Fetch-Transport – Ersetze das standardmäßige
ext-curl-HTTP-Backend durch Guzzle, Symfony HttpClient, einen Mock oder eine Variante, die alles ablehnt. Dazu kommt der Policy-Hook für Allowlists, das Einfügen von Headern und die Zuordnung pro Mandant. - Cookie-Jar – Binde ein
get(url)/set(url, header)-Jar ein, um Cookies über Fetch-Aufrufe hinweg zu speichern. In-Memory, Symfony BrowserKit oder ein JS-seitigesMap. - AbortController-Muster – Timeout, Race, Weitergabe,
AbortSignal.any/.timeoutund wie ein benutzerdefinierter PHP-Transport das Signal während der Übertragung abfragt.
Schnellstart-Beispiel
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
Siehe auch
- Referenz zu API – die vollständige
Phasis\Engine-Oberfläche. - Web-APIs – Web Platform Pack und Fetch Pack basieren auf derselben Interoperabilitätsschicht.