
# Bevezetés
A Phasis tisztán PHP JavaScript motor. ECMAScriptet tokenizál, elemez és hajt végre a gazda PHP folyamatában — `exec('node …')`, FFI és egyedi bináris bővítmény nélkül. Három szabványos PHP bővítményre van szüksége: `ext-mbstring`, `ext-bcmath` és `ext-curl` (az alapértelmezett `fetch()` átviteli mód). A `ext-intl` és a `ext-openssl` opcionális. A `bcmath`-at kihagyó buildekért lásd az [Első lépések](https://phasis.inline0.dev/hu/docs/getting-started) oldalt.

- **Beágyazható** — illesszen be egy JS futtatókörnyezetet bármely PHP alkalmazásba, keretrendszerbe vagy CLI eszközbe a `Phasis\Engine` osztály segítségével.
- **Specifikációnak megfelelő** — teljesíti a hivatalos test262 tesztcsomagot 100 %-ban, minden kategóriában, kihagyás nélkül.
- **Webes API-k** — teljes **Web Platform Pack** (URL, TextEncoder/Decoder, atob/btoa, structuredClone, performance, DOMException), teljes **Fetch Pack** (fetch, Request, Response, Headers, Body, AbortController/Signal, Blob, File, FormData, EventTarget, teljes WHATWG Streams, navigator), továbbá `crypto` + `SubtleCrypto`, `WebSocket`, `XMLHttpRequest` és valódi eseményciklus. Az importált Web Platform Tests 100 %-a sikeres.
- **Modern felület** — nyílfüggvények, osztályok, async/await, Promise-ok, generátorok, Symbol, BigInt, Proxy, Reflect, Temporal, Intl, TypedArray-ek, teljes modultámogatás.
- **PHP↔JS együttműködés** — adjon át PHP skalárokat és tömböket a JS számára (a tömbök másolódnak), kössön PHP closure-öket JS függvényekként, és hívjon JS függvényeket a PHP környezetéből. A PHP objektumok még nem oszthatók meg a JS környezetével; lásd: [Megosztott objektumok](https://phasis.inline0.dev/hu/docs/interop/shared-objects).

## Miért létezik a Phasis

Azok a PHP-alkalmazások, amelyeknek felhasználó által megadott JavaScript kódot kell futtatniuk — például sablonmotorok, frontend SSR-segédek, adatellenőrzési szabályok, tartalmi homokozók és headless tesztfuttatók — rendszerint külső folyamatként indítják a Node.js-t, vagy kihagyják ezt a funkciót. Mindkét megoldás működési bonyodalmakat okoz: egy második futtatókörnyezetet, szerializációs határt, alfolyamatok közötti csővezeték-hálózatot, valamint problémás telepíthetőséget megosztott tárhelyen.

A Phasis áthidalja ezt a hiányt. A PHP kód kizárólag PHP 8.2+ használatával képes tokenizálni, elemezni és végrehajtani a JavaScript-t, a `mbstring`, `bcmath` és `curl` bővítményekkel. A motor Composer-csomagként érkezik, és egyetlen kis API felületet tesz elérhetővé.

## Mit tud

- Megvalósítja az ECMAScript teljes szabványos könyvtárát: `Array`, `String`, `Object`, `Math`, `JSON`, `Date`, `RegExp`, `Map`, `Set`, `Promise`, `Proxy`, `Reflect`, `Symbol`, `BigInt`, `TypedArray`, `Temporal`, `Intl`, generátorok, aszinkron iterátorok és modulok.
- Tartalmazza azokat a **Web Platform** API-kat, amelyeket a való világban használt JS könyvtárak előzetesen ellenőriznek: `URL`, `URLSearchParams`, `TextEncoder`/`TextDecoder`, `atob`/`btoa`, `structuredClone`, `performance`, `DOMException`. A teljes felületet lásd a [Webes API-k](https://phasis.inline0.dev/hu/docs/compatibility/web-apis) oldalon.
- Tartalmazza a **`fetch`**-t a teljes Fetch-családdal — `Request`, `Response`, `Headers`, törzset feldolgozó elemek, `AbortController`/`AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`/`Event`, valamint a teljes WHATWG Streams (`ReadableStream`, `WritableStream`, `TransformStream`, BYOB, sorba állítási stratégiák). A valódi HTTP azonnal működik a PHP `ext-curl` megoldásán keresztül.
- Tartalmazza a **`crypto`**-t és a teljes `SubtleCrypto`-t (SHA-család, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA, ECDH, HKDF, PBKDF2), a **`WebSocket`**-t (RFC 6455 + cserélhető átviteli mód), valamint a **`XMLHttpRequest`**-t (ugyanarra a fetch-átviteli módra építve).
- Valódi **eseményciklust** biztosít: `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask`, valamint a Stage-3 `AsyncContext` funkciót, amely továbbítja az értékeket az aszinkron határokon át.
- Támogatja a modern szintaxist: destrukturálás, spread/rest, számított tulajdonságok, opcionális láncolás, nullish coalescing, sablonliterálok, címkézett sablonok, osztályok (privát mezőkkel, statikus blokkokkal, dekorátorokkal), felső szintű await.
- Értékeket alakít át az PHP↔JS határon. A skalárértékek és tömbök másolatként kerülnek át, a PHP hívható elemek JS függvényekké válnak, a JS eredmények pedig PHP skalárértékként és tömbként érkeznek vissza. A pontos szabályokat lásd az [Értékátalakítás](https://phasis.inline0.dev/hu/docs/interop/values) oldalon.
- A gazda vezérlése alatt fut. A gazda kezeli az `fetch` átviteli módot és a házirend-hookokat, az eseményciklus virtuális időben fut, a rögzített hívásverem-korlát pedig megállítja az elszabaduló rekurziót. Az iterációs ciklusok korlátja létezik, de a bájtkód-VM által futtatott ciklusokra még nincs érvényben; karakterlánc-hossz-, kimenet- és valós idejű korlát sincs. Lásd: [API: setLimit](https://phasis.inline0.dev/hu/docs/api#setlimit).
- A Node.js (V8) alapján ellenőrzött. A CI minden pushnál `main`-ra és minden pull requestnél futtatja az egység- és oracle-teszteket; a Web Platform Tests és a népszerű csomagok tesztcsomagjai pedig akkor futnak, amikor változik a motor forráskódja. A teljes test262 mátrixot kézzel futtatják, pillanatképét pedig véglegesítik a `COMPAT.md` tárolóban. Lásd: [Kompatibilitás](https://phasis.inline0.dev/hu/docs/compatibility).

## Ami nem tartozik ide

A Phasis nem JIT-fordító. Fa-bejárásos értelmező, amely alkalomszerűen bájtkód-VM-et használ. A diszpécserhez kötött feladatoknál a V8 futásidejének körülbelül 100-szeresére számítson. A kompromisszum: nincsenek függőségek, tiszta PHP, és a gazda vezérli a végrehajtást — ideális a JavaScript beágyazásához PHP-alkalmazásokba, ahol a helyesség és az elkülönítés fontosabb a nyers áteresztőképességnél.

## Hol érdemes kezdeni

- [Első lépések](https://phasis.inline0.dev/hu/docs/getting-started) — telepítse és futtassa az első szkriptet.
- [CLI](https://phasis.inline0.dev/hu/docs/cli) — `bin/phasis` fájlok futtatásához, forráskód kiértékeléséhez és az AST kiíratásához.
- [API](https://phasis.inline0.dev/hu/docs/api) — ágyazza be a `Phasis\Engine`-t a PHP alkalmazásába.
- [Együttműködés](https://phasis.inline0.dev/hu/docs/interop) — adjon át PHP értékeket és hívható elemeket a JavaScript számára.
- [Kompatibilitás](https://phasis.inline0.dev/hu/docs/compatibility) — test262-lefedettség és támogatott funkciók.
- [Elemző](https://phasis.inline0.dev/hu/docs/parser) — elemezze a JavaScript-t típusos AST-vé vagy ESTree-vé anélkül, hogy végrehajtaná.
- [Formázó](https://phasis.inline0.dev/hu/docs/formatter) — formázza a JavaScript, JSON és CSS elemeket Prettier-kompatibilis elrendezéssel.
- [Haladó témák](https://phasis.inline0.dev/hu/docs/advanced) — architektúra, bájtkód-VM, teljesítménymérések és az oracle-tesztelési modell.
