
# Ievads
Phasis ir tīrs PHP JavaScript dzinējs. Tas leksē, parsē un izpilda ECMAScript resursdatora PHP procesā — bez `exec('node …')`, FFI vai pielāgota binārā paplašinājuma. Tam nepieciešami trīs standarta PHP paplašinājumi: `ext-mbstring`, `ext-bcmath` un `ext-curl` (noklusējuma `fetch()` transports). `ext-intl` un `ext-openssl` nav obligāti. Informāciju par būvējumiem bez `bcmath` skatiet sadaļā [Darba sākšana](https://phasis.inline0.dev/lv/docs/getting-started).

- **Iegulstams** — ievietojiet JS izpildlaiku jebkurā PHP lietotnē, ietvarā vai CLI rīkā, izmantojot klasi `Phasis\Engine`.
- **Atbilst specifikācijai** — iztur oficiālo test262 testu kopu ar 100 % rezultātu visās kategorijās, bez izlaistiem testiem.
- **Tīmekļa API** — pilna **Web Platform Pack** (URL, TextEncoder/Decoder, atob/btoa, structuredClone, performance, DOMException), pilna **Fetch Pack** (fetch, Request, Response, Headers, Body, AbortController/Signal, Blob, File, FormData, EventTarget, pilnas WHATWG Streams, navigator), kā arī `crypto` + `SubtleCrypto`, `WebSocket`, `XMLHttpRequest` un īsta notikumu cilpa. Izpilda 100 % importēto Web Platform Tests testu.
- **Mūsdienīgas iespējas** — bultfunkcijas, klases, async/await, Promises, ģeneratori, Symbol, BigInt, Proxy, Reflect, Temporal, Intl, TypedArrays, pilns moduļu atbalsts.
- **PHP↔JS mijiedarbība** — nododiet PHP skalārus un masīvus uz JS (masīvi tiek kopēti), sasaistiet PHP slēgumus kā JS funkcijas un izsauciet JS funkcijas no PHP. PHP objektus pagaidām nevar koplietot ar JS; skatiet [Koplietoti objekti](https://phasis.inline0.dev/lv/docs/interop/shared-objects).

## Kāpēc radās Phasis

Lietotnēs PHP, kurām jāizpilda lietotāja iesniegts JavaScript — veidņu dzinēji, frontend SSR aizstājēji, datu validācijas noteikumi, satura izolētās vides, bezsaskarnes testu palaidēji — parasti tiek izsaukts ārējs Node.js process vai šī funkcija netiek piedāvāta. Abos gadījumos rodas darbības sarežģītība: otrs izpildlaiks, serializācijas robeža, apakšprocesu cauruļu tīkls un sarežģīta izvietošana koplietotā mitināšanā.

Phasis novērš šo trūkumu. Jūsu PHP kods var leksēt, parsēt un izpildīt JavaScript, izmantojot tikai PHP 8.2+ ar `mbstring`, `bcmath` un `curl`. Dzinējs tiek piegādāts kā Composer pakotne un piedāvā vienkāršu API saskarni.

## Ko tas dara

- Ievieš pilnu ECMAScript standarta bibliotēku: `Array`, `String`, `Object`, `Math`, `JSON`, `Date`, `RegExp`, `Map`, `Set`, `Promise`, `Proxy`, `Reflect`, `Symbol`, `BigInt`, `TypedArray`, `Temporal`, `Intl`, ģeneratorus, asinhronos iteratorus, moduļus.
- Nodrošina **Web Platform** API, kurus reālās JS bibliotēkas pārbauda pirms darbības: `URL`, `URLSearchParams`, `TextEncoder`/`TextDecoder`, `atob`/`btoa`, `structuredClone`, `performance`, `DOMException`. Pilnu iespēju klāstu skatiet sadaļā [Tīmekļa API](https://phasis.inline0.dev/lv/docs/compatibility/web-apis).
- Nodrošina **`fetch`** ar pilnu Fetch funkciju kopu — `Request`, `Response`, `Headers`, pamatdaļas patērētājiem, `AbortController`/`AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`/`Event` un pilnu WHATWG Streams (`ReadableStream`, `WritableStream`, `TransformStream`, BYOB, rindas stratēģijas). Īsts HTTP darbojas uzreiz, izmantojot PHP `ext-curl`.
- Nodrošina **`crypto`** un pilnu `SubtleCrypto` (SHA saime, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA, ECDH, HKDF, PBKDF2), **`WebSocket`** (RFC 6455 un maināms transports) un **`XMLHttpRequest`** (veidots virs tā paša fetch transporta).
- Nodrošina īstu **notikumu cilpu**: `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask`, kā arī Stage-3 `AsyncContext` vērtību nodošanai pāri asinhronām robežām.
- Atbalsta mūsdienīgu sintaksi — destrukturēšanu, spread/rest, aprēķinātus rekvizītus, izvēles ķēdes, nullish koalescēšanu, veidņu literāļus, marķētas veidnes, klases (ar privātiem laukiem, statiskiem blokiem, dekoratoriem), augstākā līmeņa await.
- Pārveido vērtības pāri PHP↔JS robežai. Skalāri un masīvi tiek kopēti, PHP izsaucamās funkcijas kļūst par JS funkcijām, un JS rezultāti tiek atgriezti kā PHP skalāri un masīvi. Precīzus noteikumus skatiet sadaļā [Vērtību pārveidošana](https://phasis.inline0.dev/lv/docs/interop/values).
- Darbojas resursdatora kontrolē. Resursdators pārvalda `fetch` transportu un politikas āķus, notikumu cilpa darbojas virtuālajā laikā, bet fiksēts izsaukumu steka ierobežojums aptur nekontrolētu rekursiju. Ir pieejams cilpu iterāciju ierobežojums, taču tas vēl netiek piemērots cilpām, ko izpilda baitu koda virtuālā mašīna; nav arī virkņu garuma, izvades vai reāllaika ierobežojumu. Skatiet [API: setLimit](https://phasis.inline0.dev/lv/docs/api#setlimit).
- Tiek pārbaudīts ar Node.js (V8). CI katrā `main` nosūtīšanā un katrā izmaiņu pieprasījumā palaiž vienību un orākula testu kopas; Web Platform Tests un populāro pakotņu testu kopas tiek palaistas, mainot dzinēja avotu. Pilna test262 matrica tiek palaista manuāli, un tās momentuzņēmums tiek pievienots `COMPAT.md`. Skatiet sadaļu [Saderība](https://phasis.inline0.dev/lv/docs/compatibility).

## Kas tas nav

Phasis nav JIT kompilators. Tas ir koka šķērsošanas interpretētājs ar iespēju izmantot baitu koda virtuālo mašīnu. Darba slodzēs, kuras ierobežo izsaukumu apstrāde, sagaidāms aptuveni 100× ilgāks izpildlaiks nekā V8. Kompromiss ir nulles atkarību, tīrs PHP un resursdatora kontrolēta izpilde — lieliski piemērota JavaScript iegulšanai PHP lietotnēs, kur pareizība un izolācija ir svarīgāka par maksimālu caurlaidspēju.

## Ar ko sākt

- [Darba sākšana](https://phasis.inline0.dev/lv/docs/getting-started) — instalējiet un palaidiet savu pirmo skriptu.
- [CLI](https://phasis.inline0.dev/lv/docs/cli) — `bin/phasis` failu palaišanai, avota koda izvērtēšanai un AST izdrukāšanai.
- [API](https://phasis.inline0.dev/lv/docs/api) — ieguliet `Phasis\Engine` savā PHP lietotnē.
- [Savietojamība](https://phasis.inline0.dev/lv/docs/interop) — nododiet PHP vērtības un izsaucamās funkcijas uz JavaScript.
- [Saderība](https://phasis.inline0.dev/lv/docs/compatibility) — test262 pārklājums un atbalstītās funkcijas.
- [Parsētājs](https://phasis.inline0.dev/lv/docs/parser) — parsējiet JavaScript par tipizētu AST vai ESTree, to neizpildot.
- [Formatētājs](https://phasis.inline0.dev/lv/docs/formatter) — formatējiet JavaScript, JSON un CSS ar prettier saderīgu izkārtojumu.
- [Papildu informācija](https://phasis.inline0.dev/lv/docs/advanced) — arhitektūra, baitu koda virtuālā mašīna, etalonmērījumi un orākula testēšanas modelis.
