Zum Inhalt springen

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-callable als 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 undefined an) 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-seitiges Map.
  • AbortController-Muster – Timeout, Race, Weitergabe, AbortSignal.any / .timeout und 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.