
# Introduktion
Phasis är en ren PHP-JavaScript-motor. Den lexar, parsar och kör ECMAScript i värdens PHP-process — utan `exec('node …')`, FFI eller ett anpassat binärt tillägg. Den kräver tre standardtillägg för PHP: `ext-mbstring`, `ext-bcmath` och `ext-curl` (standardtransporten för `fetch()`). `ext-intl` och `ext-openssl` är valfria. Se [Kom igång](https://phasis.inline0.dev/sv/docs/getting-started) för byggen som utelämnar `bcmath`.

- **Inbäddningsbar** — lägg till en JS-körmiljö i valfri PHP-app, ramverk eller verktyg i CLI via klassen `Phasis\Engine`.
- **Specifikationskompatibel** — klarar den officiella test262-sviten till 100 %, i alla kategorier utan undantag.
- **Webb-API:er** — fullständiga **Web Platform Pack** (URL, TextEncoder/Decoder, atob/btoa, structuredClone, performance, DOMException), fullständiga **Fetch Pack** (fetch, Request, Response, Headers, Body, AbortController/Signal, Blob, File, FormData, EventTarget, fullständiga WHATWG Streams, navigator), plus `crypto` + `SubtleCrypto`, `WebSocket`, `XMLHttpRequest` och en riktig händelseloop. 100 % av importerade Web Platform Tests klaras.
- **Modernt gränssnitt** — pilfunktioner, klasser, async/await, Promises, generatorer, Symbol, BigInt, Proxy, Reflect, Temporal, Intl, TypedArrays och fullt modulstöd.
- **Samverkan mellan PHP och JS** — skicka PHP skalärer och arrayer till JS (arrayer kopieras), bind PHP-slutningar som JS-funktioner och anropa JS-funktioner från PHP. PHP-objekt kan ännu inte delas med JS; se [Delade objekt](https://phasis.inline0.dev/sv/docs/interop/shared-objects).

## Varför Phasis finns

PHP-applikationer som behöver köra användartillhandahållen JavaScript — mallmotorer, shim-lösningar för rendering på servern, datavalideringsregler, innehållssandlådor och huvudlösa testrunners — anropar vanligtvis Node.js via skalet eller hoppar över funktionen. Båda alternativen ökar den operativa komplexiteten: en andra körmiljö, en serialiseringsgräns, ett nätverk av rör för underprocesser och en besvärlig driftsättningssituation för delad hosting.

Phasis fyller den luckan. Din PHP-kod kan lexas, parsas och köras med JavaScript och endast PHP 8.2+ med `mbstring`, `bcmath` och `curl`. Motorn levereras som ett Composer-paket och exponerar ett enda litet API-gränssnitt.

## Vad det gör

- Implementerar hela ECMAScript-standardbiblioteket: `Array`, `String`, `Object`, `Math`, `JSON`, `Date`, `RegExp`, `Map`, `Set`, `Promise`, `Proxy`, `Reflect`, `Symbol`, `BigInt`, `TypedArray`, `Temporal`, `Intl`, generatorer, asynkrona iteratorer och moduler.
- Levererar de **Web Platform**-API:er som bibliotek för JS i praktisk användning förkontrollerar: `URL`, `URLSearchParams`, `TextEncoder`/`TextDecoder`, `atob`/`btoa`, `structuredClone`, `performance`, `DOMException`. Se [Webb-API:er](https://phasis.inline0.dev/sv/docs/compatibility/web-apis) för hela gränssnittet.
- Levererar **`fetch`** med hela Fetch-familjen — `Request`, `Response`, `Headers`, body-konsumenter, `AbortController`/`AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`/`Event` och fullständiga WHATWG Streams (`ReadableStream`, `WritableStream`, `TransformStream`, BYOB och köstrategier). Riktig HTTP fungerar direkt via PHPs `ext-curl`.
- Levererar **`crypto`** samt fullständigt `SubtleCrypto` (SHA-familjen, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA, ECDH, HKDF, PBKDF2), **`WebSocket`** (RFC 6455 samt utbytbar transport) och **`XMLHttpRequest`** (byggt ovanpå samma fetch-transport).
- Levererar en riktig **händelseloop**: `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask` samt Stage-3 `AsyncContext` för värdespridning över asynkrona gränser.
- Stöder modern syntax — destrukturering, spread/rest, beräknade egenskaper, valfri kedjning, nullish-sammanslagning, mallsträngar, taggade mallar, klasser (med privata fält, statiska block och dekoratörer) samt await på toppnivå.
- Konverterar värden över gränsen mellan PHP och JS. Skalärer och arrayer kopieras in, anropbara PHP blir JS-funktioner och resultat från JS returneras som PHP-skalärer och arrayer. Se [Värdekonvertering](https://phasis.inline0.dev/sv/docs/interop/values) för de exakta reglerna.
- Körs under värdens kontroll. Värden hanterar transport och policykrokar för `fetch`, händelseloopen körs med virtuell tid och en fast gräns för anropsstacken stoppar skenande rekursion. Det finns en gräns för loopvarv, men den upprätthålls ännu inte för loopar som bytekod-VM:en kör, och det finns inga gränser för stränglängd, utdata eller körtid; se [API: setLimit](https://phasis.inline0.dev/sv/docs/api#setlimit).
- Verifieras mot Node.js (V8). CI kör enhets- och orakelsviterna vid varje push till `main` och varje pull request, samt Web Platform Tests och sviter för populära paket när motorns källkod ändras; hela test262-matrisen körs manuellt och dess ögonblicksbild checkas in i `COMPAT.md`. Se [Kompatibilitet](https://phasis.inline0.dev/sv/docs/compatibility).

## Vad det inte är

Phasis är ingen JIT-kompilator. Det är en trädvandrande tolk med en opportunistisk bytekod-VM. Räkna med ~100× körtiden för V8 vid arbetsbelastningar som begränsas av dispatch. Kompromissen ger inga beroenden, ren PHP och körning under värdens kontroll — perfekt för att bädda in JavaScript i PHP-appar där korrekthet och isolering är viktigare än rå genomströmning.

## Kom igång

- [Kom igång](https://phasis.inline0.dev/sv/docs/getting-started) — installera och kör ditt första skript.
- [CLICLI](https://phasis.inline0.dev/sv/docs/cli) — `bin/phasis` för att köra filer, utvärdera källkod och dumpa AST.
- [APIBädda in](https://phasis.inline0.dev/sv/docs/api) — bädda in `Phasis\Engine` i din PHP-app.
- [Samverkan](https://phasis.inline0.dev/sv/docs/interop) — skicka värden och anropsbara funktioner från PHP till JavaScript.
- [Kompatibilitet](https://phasis.inline0.dev/sv/docs/compatibility) — test262-täckning och funktioner som stöds.
- [Parser](https://phasis.inline0.dev/sv/docs/parser) — parsa JavaScript till en typad AST eller ESTree utan att köra koden.
- [Formaterare](https://phasis.inline0.dev/sv/docs/formatter) — formatera JavaScript, JSON och CSS med layout som är kompatibel med prettier.
- [Avancerat](https://phasis.inline0.dev/sv/docs/advanced) — arkitektur, bytekod-VM, riktmärken och orakeltestmodellen.
