
# Introduktion
Phasis er en ren PHP-JavaScript-motor. Den leksikaliserer, parser og udfører ECMAScript i værtsprocessen PHP — uden `exec('node …')`, uden FFI og uden en brugerdefineret binær udvidelse. Den kræver tre standardudvidelser til PHP: `ext-mbstring`, `ext-bcmath` og `ext-curl` (standardtransporten `fetch()`). `ext-intl` og `ext-openssl` er valgfrie. Se [Kom godt i gang](https://phasis.inline0.dev/da/docs/getting-started) for builds, der udelader `bcmath`.

- **Kan indlejres** — føj en JS-runtime til enhver PHP-app, ethvert framework eller CLI-værktøj via klassen `Phasis\Engine`.
- **Specifikationskompatibel** — består den officielle test262-testpakke med 100 %, i alle kategorier og uden spring over.
- **Web-API'er** — fuld **Web Platform Pack** (URL, TextEncoder/Decoder, atob/btoa, structuredClone, performance, DOMException), fuld **Fetch Pack** (fetch, Request, Response, Headers, Body, AbortController/Signal, Blob, File, FormData, EventTarget, fulde WHATWG Streams, navigator) samt `crypto` + `SubtleCrypto`, `WebSocket`, `XMLHttpRequest` og en rigtig event loop. 100 % af de importerede Web Platform Tests består.
- **Moderne funktioner** — pilefunktioner, klasser, async/await, Promises, generatorer, Symbol, BigInt, Proxy, Reflect, Temporal, Intl, TypedArrays, fuld understøttelse af moduler.
- **Interoperabilitet mellem PHP og JS** — send PHP-skalarer og arrays til JS (arrays kopieres), tilknyt PHP-closures som JS-funktioner, og kald JS-funktioner fra PHP. PHP-objekter kan endnu ikke deles med JS; se [Delte objekter](https://phasis.inline0.dev/da/docs/interop/shared-objects).

## Hvorfor Phasis findes

PHP-applikationer, der skal køre brugerleveret JavaScript — skabelonmotorer, frontend-SSR-shims, regler til datavalidering, indholdssandkasser, headless-testløbere — starter normalt Node.js som en separat proces eller springer funktionen over. Begge dele øger den driftsmæssige kompleksitet: en ekstra runtime, en serialiseringsgrænse, et netværk af pipes mellem underprocesser og besværlige muligheder for udrulning på delt hosting.

Phasis lukker dette hul. Din PHP-kode kan leksikalisere, parse og udføre JavaScript udelukkende med PHP 8.2+ og `mbstring`, `bcmath` og `curl`. Motoren leveres som en Composer-pakke og har en lille overflade med ét API.

## Funktioner

- Implementerer hele ECMAScript-standardbiblioteket: `Array`, `String`, `Object`, `Math`, `JSON`, `Date`, `RegExp`, `Map`, `Set`, `Promise`, `Proxy`, `Reflect`, `Symbol`, `BigInt`, `TypedArray`, `Temporal`, `Intl`, generatorer, async-iteratorer, moduler.
- Leverer **Web Platform**-API'er, som virkelige JS-biblioteker forhåndstjekker for: `URL`, `URLSearchParams`, `TextEncoder`/`TextDecoder`, `atob`/`btoa`, `structuredClone`, `performance`, `DOMException`. Se [Web-API'er](https://phasis.inline0.dev/da/docs/compatibility/web-apis) for den fulde overflade.
- Leverer **`fetch`** med hele Fetch-familien — `Request`, `Response`, `Headers`, body-forbrugere, `AbortController`/`AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`/`Event` og fulde WHATWG Streams (`ReadableStream`, `WritableStream`, `TransformStream`, BYOB, køstrategier). En rigtig HTTP virker straks via PHPs `ext-curl`.
- Leverer **`crypto`** + fuld `SubtleCrypto` (SHA-familien, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA, ECDH, HKDF, PBKDF2), **`WebSocket`** (RFC 6455 + udskiftelig transport) og **`XMLHttpRequest`** (bygget oven på den samme fetch-transport).
- Leverer en rigtig **event loop**: `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask` samt Stage-3 `AsyncContext` til videreførsel af værdier på tværs af asynkrone grænser.
- Understøtter moderne syntaks — destrukturering, spread/rest, beregnede egenskaber, valgfri chaining, nullish coalescing, skabelonstrenge, taggede skabeloner, klasser (med private felter, statiske blokke, dekoratorer), top-level await.
- Konverterer værdier på tværs af grænsen mellem PHP og JS. Skalarer og arrays kopieres ind, PHP-callables bliver til JS-funktioner, og JS-resultater returneres som PHP-skalarer og arrays. Se [Værdikonvertering](https://phasis.inline0.dev/da/docs/interop/values) for de præcise regler.
- Kører under værtens kontrol. Værten ejer transporten `fetch` og politik-hooks, event loop kører på virtuel tid, og en fast grænse for kaldestakken stopper løbsk rekursion. Der findes en grænse for løkkeiterationer, men den håndhæves endnu ikke på løkker, som bytecode-VM'en kører, og der er ingen grænser for strenglængde, output eller vægurtid; se [API: setLimit](https://phasis.inline0.dev/da/docs/api#setlimit).
- Verificeres mod Node.js (V8). CI kører enhedstestene og oracle-testpakkerne ved hver push til `main` og hver pull request samt Web Platform Tests og testpakkerne for populære pakker, når motorens kildekode ændres; hele test262-matricen køres manuelt, og snapshot'et indsendes til `COMPAT.md`. Se [Kompatibilitet](https://phasis.inline0.dev/da/docs/compatibility).

## Hvad det ikke er

Phasis er ikke en JIT-compiler. Det er en tree-walking-fortolker med en bytecode-VM, der bruges efter behov. Forvent en runtime på ~100× V8 ved arbejdsbelastninger, der er begrænset af dispatch. Til gengæld får du nul afhængigheder, ren PHP og værtsstyret udførelse — perfekt til at indlejre JavaScript i PHP-apps, hvor korrekthed og isolation er vigtigere end rå gennemløbshastighed.

## Sådan kommer du i gang

- [Kom godt i gang](https://phasis.inline0.dev/da/docs/getting-started) — installer, og kør dit første script.
- [CLI](https://phasis.inline0.dev/da/docs/cli) — `bin/phasis` til at køre filer, evaluere kildekode og udskrive AST'en.
- [API](https://phasis.inline0.dev/da/docs/api) — indlejr `Phasis\Engine` i din PHP-app.
- [Interoperabilitet](https://phasis.inline0.dev/da/docs/interop) — send PHP-værdier og callables til JavaScript.
- [Kompatibilitet](https://phasis.inline0.dev/da/docs/compatibility) — test262-dækning og understøttede funktioner.
- [Parser](https://phasis.inline0.dev/da/docs/parser) — parse JavaScript til et typet AST eller ESTree uden at udføre koden.
- [Formatter](https://phasis.inline0.dev/da/docs/formatter) — formatér JavaScript, JSON og CSS med et layout, der er kompatibelt med prettier.
- [Avanceret](https://phasis.inline0.dev/da/docs/advanced) — arkitektur, bytecode-VM, benchmarks og oracle-testmodellen.
