Úvod
Phasis je čistý engine PHP JavaScript. Lexuje, analyzuje a vykonáva ECMAScript v procese hostiteľského PHP bez exec('node …'), FFI a vlastného binárneho rozšírenia. Vyžaduje tri štandardné rozšírenia PHP: ext-mbstring, ext-bcmath a ext-curl (predvolený prenosový mechanizmus fetch()). ext-intl a ext-openssl sú voliteľné. Zostavy bez bcmath nájdete v časti Začíname.
- Vložiteľný — vložte modul JS do ľubovoľnej aplikácie PHP, frameworku alebo nástroja CLI prostredníctvom triedy
Phasis\Engine. - V súlade so špecifikáciou — úspešne prejde oficiálnou sadou test262 na úrovni 100 %, vo všetkých kategóriách a bez preskočených testov.
- Webové API — úplný balík Web Platform (URL, TextEncoder/Decoder, atob/btoa, structuredClone, performance, DOMException), úplný balík Fetch (fetch, Request, Response, Headers, Body, AbortController/Signal, Blob, File, FormData, EventTarget, úplné WHATWG Streams, navigator), plus
crypto+SubtleCrypto,WebSocket,XMLHttpRequesta skutočná slučka udalostí. Úspešne prejde 100 % importovaných testov Web Platform. - Moderné rozhranie — šípkové funkcie, triedy, async/await, Promises, generátory, Symbol, BigInt, Proxy, Reflect, Temporal, Intl, TypedArrays a úplná podpora modulov.
- Prepojenie PHP↔JS — odovzdávajte skaláre PHP a polia do JS (polia sa kopírujú), viažte uzávery PHP ako funkcie JS a volajte funkcie JS z PHP. Objekty PHP zatiaľ nemožno zdieľať s JS; pozrite si Zdieľané objekty.
Prečo vznikol Phasis
Aplikácie PHP, ktoré potrebujú spúšťať používateľský kód JavaScript — šablónovacie moduly, nástroje na obchádzanie SSR pre frontend, pravidlá overovania údajov, izolované prostredia pre obsah a bezhlavé testovacie spúšťače — zvyčajne spustia Node.js ako externý proces alebo túto funkciu vynechajú. Obe možnosti prinášajú prevádzkovú zložitosť: druhé prostredie, hranicu serializácie, sieť kanálov medzi podprocesmi a náročné nasadenie v zdieľanom hostingu.
Phasis túto medzeru vypĺňa. Váš kód PHP môže lexovať, analyzovať a spúšťať JavaScript iba pomocou PHP 8.2+ s mbstring, bcmath a curl. Engine sa dodáva ako balík Composer a sprístupňuje malé jednotné rozhranie API.
Čo dokáže
- Implementuje úplnú štandardnú knižnicu ECMAScript:
Array,String,Object,Math,JSON,Date,RegExp,Map,Set,Promise,Proxy,Reflect,Symbol,BigInt,TypedArray,Temporal,Intl, generátory, asynchrónne iterátory a moduly. - Dodáva rozhrania API Web Platform, ktoré knižnice JS z praxe vopred kontrolujú:
URL,URLSearchParams,TextEncoder/TextDecoder,atob/btoa,structuredClone,performance,DOMException. Úplný zoznam rozhraní nájdete v časti Webové API. - Dodáva
fetchs úplnou rodinou Fetch —Request,Response,Headers, čítačmi tela,AbortController/AbortSignal,Blob,File,FormData,EventTarget/Eventa úplným WHATWG Streams (ReadableStream,WritableStream,TransformStream, BYOB a stratégiami frontu). Skutočný HTTP funguje okamžite vďaka PHPext-curl. - Dodáva
crypto+ úplnéSubtleCrypto(rodina SHA, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA, ECDH, HKDF, PBKDF2),WebSocket(RFC 6455 + vymeniteľný prenosový mechanizmus) aXMLHttpRequest(postavené na rovnakom prenosovom mechanizme fetch). - Dodáva skutočnú slučku udalostí:
setTimeout,setInterval,clearTimeout,clearInterval,queueMicrotaska Stage-3AsyncContextna prenos hodnôt cez asynchrónne hranice. - Podporuje modernú syntax — deštrukturalizáciu, spread/rest, vypočítané vlastnosti, voliteľné reťazenie, spájanie pri hodnotách null, šablónové literály, označené šablóny, triedy (so súkromnými poľami, statickými blokmi a dekorátormi) a await na najvyššej úrovni.
- Prevádza hodnoty cez hranicu PHP↔JS. Skaláre a polia sa kopírujú dovnútra, volateľné objekty PHP sa menia na funkcie JS a výsledky JS sa vracajú ako skaláre a polia PHP. Presné pravidlá nájdete v časti Konverzia hodnôt.
- Beží pod kontrolou hostiteľa. Hostiteľ vlastní prenosový mechanizmus
fetcha politické háky, slučka udalostí beží vo virtuálnom čase a pevný limit zásobníka volaní zastavuje nekonečnú rekurziu. Limit počtu iterácií slučky existuje, ale zatiaľ sa nevynucuje pri slučkách spúšťaných VM bajtkódu; neexistujú ani limity dĺžky reťazcov, výstupu či reálneho času. Pozrite si API: setLimit. - Overuje sa voči Node.js (V8). CI spúšťa jednotkové testy a testy referenčnej implementácie pri každom odoslaní do
maina pri každej požiadavke na stiahnutie; testy Web Platform a sady populárnych balíkov spúšťa pri zmenách zdrojového kódu enginu. Úplnú maticu test262 spúšťa vývojár ručne a jej snímka sa ukladá doCOMPAT.md. Pozrite si Kompatibilita.
Čo to nie je
Phasis nie je JIT kompilátor. Je to interpret prechádzajúci strom s príležitostným virtuálnym strojom bajtkódu. Pri úlohách limitovaných obsluhou očakávajte približne 100× dlhší beh než pri V8. Kompromisom sú nulové závislosti, čisté PHP a vykonávanie riadené hostiteľom — ideálne na vloženie JavaScript do aplikácií PHP, kde sú správnosť a izolácia dôležitejšie než surová priepustnosť.
Kde začať
- Začíname — nainštalujte a spustite svoj prvý skript.
- CLI —
bin/phasisna spúšťanie súborov, vyhodnocovanie zdrojového kódu a výpis AST. - API — vložte
Phasis\Enginedo svojej aplikácie PHP. - Prepojenie — odovzdávanie hodnôt a volateľných objektov PHP do JavaScript.
- Kompatibilita — pokrytie test262 a podporované funkcie.
- Parser — parsovanie JavaScript do typovaného AST alebo ESTree bez jeho vykonania.
- Formátovač — formátovanie JavaScript, JSON a CSS s rozložením kompatibilným s prettier.
- Pokročilé témy — architektúra, virtuálny stroj bajtkódu, benchmarky a model testovania pomocou oracle.