
# Sissejuhatus
Phasis on puhas-PHP JavaScript-mootor. See lekseerib, parsib ja käivitab ECMAScripti hosti PHP protsessis — ilma `exec('node …')`-ta, FFI-ta ja kohandatud binaarlaienduseta. See vajab kolme standardset PHP laiendust: `ext-mbstring`, `ext-bcmath` ja `ext-curl` (vaikeedastus `fetch()` jaoks). `ext-intl` ja `ext-openssl` on valikulised. Vaadake [Alustamine](https://phasis.inline0.dev/et/docs/getting-started) juhiseid järkude jaoks, milles `bcmath` puudub.

- **Manustatav** — lisage mis tahes PHP rakendusse, raamistikku või CLI-tööriista `Phasis\Engine` klassi kaudu JS käituskeskkond.
- **Spetsifikatsioonile vastav** — läbib ametliku test262 komplekti tasemel 100 %, kõik kategooriad, ühtegi vahelejätmist pole.
- **Veebi API-d** — täielik **Web Platform Pack** (URL, TextEncoder/Decoder, atob/btoa, structuredClone, performance, DOMException), täielik **Fetch Pack** (fetch, Request, Response, Headers, Body, AbortController/Signal, Blob, File, FormData, EventTarget, täielik WHATWG Streams, navigator), lisaks `crypto` + `SubtleCrypto`, `WebSocket`, `XMLHttpRequest` ja päris sündmussilmus. Läbib 100 % imporditud Web Platform Tests testidest.
- **Kaasaegne funktsioonistik** — noolefunktsioonid, klassid, async/await, Promises, generaatorid, Symbol, BigInt, Proxy, Reflect, Temporal, Intl, TypedArrays, täielik moodulite tugi.
- **PHP↔JS koostalitlus** — edastage PHP skalaarid ja massiivid väärtusele JS (massiivid kopeeritakse), siduge PHP sulgurid JS funktsioonidena ja kutsuge JS funktsioone väärtusest PHP. PHP objekte ei saa veel JS-iga jagada; vt [Jagatud objektid](https://phasis.inline0.dev/et/docs/interop/shared-objects).

## Miks Phasis olemas on

PHP rakendused, mis peavad käivitama kasutaja antud JavaScript-i — mallimootorid, kasutajaliidese SSR-i vahendid, andmete valideerimise reeglid, sisusandboxid, peata testikäivitid — kasutavad tavaliselt Node.js-i välisprotsessina või jätavad funktsiooni lisamata. Mõlemad valikud suurendavad käitamise keerukust: teine käituskeskkond, serialiseerimispiir, alamprotsesside torustik ning jagatud majutuse jaoks keeruline turvarisk.

Phasis täidab selle lünga. Teie PHP kood saab lekseerida, parsida ja käivitada JavaScript-i, kasutades ainult PHP 8.2+ versiooni koos laiendustega `mbstring`, `bcmath` ja `curl`. Mootor tarnitakse Composer-paketina ja sellel on väike API-liides.

## Mida see teeb

- Rakendab täieliku ECMAScripti standardteegi: `Array`, `String`, `Object`, `Math`, `JSON`, `Date`, `RegExp`, `Map`, `Set`, `Promise`, `Proxy`, `Reflect`, `Symbol`, `BigInt`, `TypedArray`, `Temporal`, `Intl`, generaatorid, asünkroonsed iteraatorid, moodulid.
- Sisaldab **Web Platformi** API-sid, mida pärismaailma JS teegid eelkontrollivad: `URL`, `URLSearchParams`, `TextEncoder`/`TextDecoder`, `atob`/`btoa`, `structuredClone`, `performance`, `DOMException`. Täieliku funktsioonistiku leiate lehelt [Veebi API-d](https://phasis.inline0.dev/et/docs/compatibility/web-apis).
- Sisaldab **`fetch`**-i koos täieliku Fetchi perekonnaga — `Request`, `Response`, `Headers`, keha tarbijad, `AbortController`/`AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`/`Event` ja täielikud WHATWG Streams (`ReadableStream`, `WritableStream`, `TransformStream`, BYOB, järjekorrastrateegiad). Päris HTTP töötab kohe PHP `ext-curl` abil.
- Sisaldab **`crypto`**-i ja täielikku `SubtleCrypto`-i (SHA-perekond, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA, ECDH, HKDF, PBKDF2), **`WebSocket`**-i (RFC 6455 ja vahetatav edastus) ning **`XMLHttpRequest`**-i (kasutab sama fetchi edastust).
- Sisaldab päris **sündmussilmust**: `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask` ning Stage-3 `AsyncContext` väärtuste edastamiseks asünkroonsete piiride kaudu.
- Toetab nüüdisaegset süntaksit — destruktureerimine, spread/rest, arvutatud omadused, valikuline aheldamine, nullish coalescing, mallisõned, märgendatud mallid, klassid (privaatväljade, staatiliste plokkide ja dekoraatoritega), tipptaseme await.
- Teisendab väärtusi üle piiri PHP↔JS. Skalaare ja massiive kopeeritakse sisse, PHP kutsutavatest saavad JS funktsioonid ning JS tulemused tagastatakse PHP skalaaride ja massiividena. Täpsed reeglid leiate lehelt [Väärtuste teisendamine](https://phasis.inline0.dev/et/docs/interop/values).
- Töötab hosti juhtimise all. Hosti hallata jäävad `fetch` edastus ja poliitikakonksud, sündmussilmus kasutab virtuaalaega ning fikseeritud väljakutsepinu ülempiir peatab lõputu rekursiooni. Tsükli korduste piirang on olemas, kuid seda ei rakendata veel baidikoodi VM-i käivitatavatele tsüklitele; stringipikkuse, väljundi ega seinakella ajalimiiti pole. Vt [API: setLimit](https://phasis.inline0.dev/et/docs/api#setlimit).
- Kontrollitakse Node.js abil (V8). CI käivitab ühik- ja oraaklitestid iga `main`-i üleslaadimise ja tõmbepäringu korral ning Web Platform Tests testid ja populaarsete pakettide komplektid mootori lähtekoodi muutumisel; täielik test262 maatriks käivitatakse käsitsi ja selle hetktõmmis lisatakse `COMPAT.md`-i. Vt [Ühilduvus](https://phasis.inline0.dev/et/docs/compatibility).

## Mis see ei ole

Phasis pole JIT-kompilaator. See on puud läbiv interpretaator koos võimaluse korral kasutatava baidikoodi VM-iga. Arvutuskoormusega tööde puhul arvestage ligikaudu 100× suurema käitusajaga kui V8-l. Vastutasuks puuduvad sõltuvused, kood on puhas PHP ning täitmist juhib host — sobib hästi JavaScript manustamiseks PHP rakendustesse, kus korrektsus ja eraldatus on toorest läbilaskevõimest tähtsamad.

## Kust alustada

- [Alustamine](https://phasis.inline0.dev/et/docs/getting-started) — installige ja käivitage oma esimene skript.
- [CLI](https://phasis.inline0.dev/et/docs/cli) — `bin/phasis` failide käivitamiseks, lähtekoodi hindamiseks ja AST väljundisse kirjutamiseks.
- [API](https://phasis.inline0.dev/et/docs/api) — manustage `Phasis\Engine` oma PHP rakendusse.
- [Koostalitlus](https://phasis.inline0.dev/et/docs/interop) — edastage PHP väärtusi ja kutsutavaid väärtusele JavaScript.
- [Ühilduvus](https://phasis.inline0.dev/et/docs/compatibility) — test262 katvus ja toetatud funktsioonid.
- [Parser](https://phasis.inline0.dev/et/docs/parser) — parsige JavaScript tüübistatud AST-ks või ESTree-ks seda käivitamata.
- [Vormindaja](https://phasis.inline0.dev/et/docs/formatter) — vormindage JavaScript, JSON ja CSS prettieriga ühilduva paigutusega.
- [Täpsem teave](https://phasis.inline0.dev/et/docs/advanced) — arhitektuur, baidikoodi VM, võrdlusalused ja oraaklitestimise mudel.
