
# Einführung
Phasis ist eine reine PHP-JavaScript-Engine. Sie lexikalisiert, parst und führt ECMAScript im PHP-Prozess der Host-Anwendung aus – ohne `exec('node …')`, ohne FFI und ohne benutzerdefinierte Binärerweiterung. Erforderlich sind drei standardmäßige PHP-Erweiterungen: `ext-mbstring`, `ext-bcmath` und `ext-curl` (der standardmäßige `fetch()`-Transport). `ext-intl` und `ext-openssl` sind optional. Unter [Erste Schritte](https://phasis.inline0.dev/de/docs/getting-started) findest du Builds, die `bcmath` weglassen.

- **Einbettbar** – Bette mit der Klasse `Phasis\Engine` eine JS-Laufzeit in jede PHP-App, jedes Framework oder CLI-Tool ein.
- **Spezifikationskonform** – besteht die offizielle test262-Suite zu 100 %, in jeder Kategorie und ohne Auslassungen.
- **Web-APIs** – vollständiges **Web Platform Pack** (URL, TextEncoder/Decoder, atob/btoa, structuredClone, performance, DOMException), vollständiges **Fetch Pack** (fetch, Request, Response, Headers, Body, AbortController/Signal, Blob, File, FormData, EventTarget, vollständige WHATWG Streams, navigator) sowie `crypto` + `SubtleCrypto`, `WebSocket`, `XMLHttpRequest` und eine echte Ereignisschleife. 100 % der importierten Web Platform Tests bestehen.
- **Moderne Schnittstelle** – Pfeilfunktionen, Klassen, async/await, Promises, Generatoren, Symbol, BigInt, Proxy, Reflect, Temporal, Intl, TypedArrays und vollständige Modulunterstützung.
- **Interoperabilität zwischen PHP und JS** – Übergib PHP-Skalare und Arrays an JS (Arrays werden kopiert), binde PHP-Closures als JS-Funktionen ein und rufe aus PHP JS-Funktionen auf. PHP-Objekte können noch nicht mit JS geteilt werden; siehe [Gemeinsam genutzte Objekte](https://phasis.inline0.dev/de/docs/interop/shared-objects).

## Warum es Phasis gibt

PHP-Anwendungen, die vom Nutzer bereitgestelltes JavaScript ausführen müssen – etwa Templating-Engines, Frontend-SSR-Shims, Datenvalidierungsregeln, Content-Sandboxes oder Headless-Test-Runner –, rufen meist Node.js als separaten Prozess auf oder verzichten auf diese Funktion. Beides erhöht den Betriebsaufwand: eine zweite Laufzeit, eine Serialisierungsgrenze, zahlreiche Pipes zwischen Subprozessen und eine problematische Bereitstellung auf Shared Hosting.

Phasis schließt diese Lücke. Dein PHP-Code kann JavaScript ausschließlich mit PHP 8.2+ sowie `mbstring`, `bcmath` und `curl` lexikalisieren, parsen und ausführen. Die Engine wird als Composer-Paket bereitgestellt und bietet eine kleine, einheitliche API-Schnittstelle.

## Funktionen

- Implementiert die vollständige ECMAScript-Standardbibliothek: `Array`, `String`, `Object`, `Math`, `JSON`, `Date`, `RegExp`, `Map`, `Set`, `Promise`, `Proxy`, `Reflect`, `Symbol`, `BigInt`, `TypedArray`, `Temporal`, `Intl`, Generatoren, async Iteratoren und Module.
- Stellt **Web Platform**-APIs bereit, auf deren Vorhandensein echte JS-Bibliotheken oft prüfen: `URL`, `URLSearchParams`, `TextEncoder`/`TextDecoder`, `atob`/`btoa`, `structuredClone`, `performance`, `DOMException`. Die vollständige Schnittstelle findest du unter [Web-APIs](https://phasis.inline0.dev/de/docs/compatibility/web-apis).
- Stellt **`fetch`** mit der vollständigen Fetch-Familie bereit – `Request`, `Response`, `Headers`, Body-Consumer, `AbortController`/`AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`/`Event` und vollständige WHATWG Streams (`ReadableStream`, `WritableStream`, `TransformStream`, BYOB, Warteschlangenstrategien). Echtes HTTP funktioniert dank PHPs `ext-curl` direkt nach der Installation.
- Stellt **`crypto`** und vollständiges `SubtleCrypto` (SHA-Familie, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA, ECDH, HKDF, PBKDF2), **`WebSocket`** (RFC 6455 und austauschbarer Transport) sowie **`XMLHttpRequest`** (auf demselben Fetch-Transport aufbauend) bereit.
- Stellt eine echte **Ereignisschleife** bereit: `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask` sowie Stage-3-`AsyncContext` für die Wertübertragung über asynchrone Grenzen hinweg.
- Unterstützt moderne Syntax – Destructuring, Spread/Rest, berechnete Eigenschaften, optionales Chaining, Nullish-Coalescing, Template-Literale, getaggte Templates, Klassen (mit privaten Feldern, statischen Blöcken und Decorators) sowie Top-Level-Await.
- Konvertiert Werte über die Grenze zwischen PHP und JS hinweg. Skalare und Arrays werden hineinkopiert, aufrufbare Werte aus PHP werden zu JS-Funktionen und JS-Ergebnisse kommen als PHP-Skalare und Arrays zurück. Die genauen Regeln findest du unter [Wertkonvertierung](https://phasis.inline0.dev/de/docs/interop/values).
- Läuft unter der Kontrolle des Hosts. Der Host verwaltet den `fetch`-Transport und die Richtlinien-Hooks, die Ereignisschleife läuft mit virtueller Zeit und eine feste Obergrenze für den Aufrufstack stoppt endlose Rekursion. Es gibt eine Begrenzung für Schleifendurchläufe, sie gilt aber noch nicht für Schleifen der Bytecode-VM. Außerdem gibt es keine Grenzen für Stringlänge, Ausgabe oder Laufzeit; siehe [API: setLimit](https://phasis.inline0.dev/de/docs/api#setlimit).
- Ist mit Node.js (V8) verifiziert. CI führt bei jedem Push auf `main` und jedem Pull Request die Unit- und Oracle-Suites aus. Die Web Platform Tests und Suites für beliebte Pakete laufen, wenn sich der Engine-Quellcode ändert; die vollständige test262-Matrix wird manuell ausgeführt und ihr Snapshot in `COMPAT.md` eingecheckt. Siehe [Kompatibilität](https://phasis.inline0.dev/de/docs/compatibility).

## Was es nicht ist

Phasis ist kein JIT-Compiler. Es handelt sich um einen baumwandelnden Interpreter mit einer optional eingesetzten Bytecode-VM. Bei dispatchgebundenen Workloads ist mit etwa dem 100-Fachen der Laufzeit von V8 zu rechnen. Dafür gibt es keine Abhängigkeiten, reines PHP und hostgesteuerte Ausführung – ideal, um JavaScript in PHP-Apps einzubetten, wenn Korrektheit und Isolation wichtiger sind als maximaler Durchsatz.

## Wo du anfangen kannst

- [Erste Schritte](https://phasis.inline0.dev/de/docs/getting-started) – installiere die Engine und führe dein erstes Skript aus.
- [CLI](https://phasis.inline0.dev/de/docs/cli) – `bin/phasis` zum Ausführen von Dateien, Auswerten von Quellcode und Ausgeben des AST.
- [API](https://phasis.inline0.dev/de/docs/api) – Bette `Phasis\Engine` in deine PHP-App ein.
- [Interoperabilität](https://phasis.inline0.dev/de/docs/interop) – übergib PHP-Werte und aufrufbare Werte an JavaScript.
- [Kompatibilität](https://phasis.inline0.dev/de/docs/compatibility) – test262-Abdeckung und unterstützte Funktionen.
- [Parser](https://phasis.inline0.dev/de/docs/parser) – parse JavaScript in einen typisierten AST oder ESTree, ohne ihn auszuführen.
- [Formatter](https://phasis.inline0.dev/de/docs/formatter) – formatiere JavaScript, JSON und CSS in einem mit Prettier kompatiblen Layout.
- [Fortgeschrittenes](https://phasis.inline0.dev/de/docs/advanced) – Architektur, Bytecode-VM, Benchmarks und das Oracle-Testmodell.
