Interoperabilitate
Phasis rulează în același proces PHP ca aplicația dumneavoastră, astfel că valorile trec între PHP și JavaScript fără JSON, pipe-uri sau un al doilea mediu de execuție. Trec prin conversie: valorile scalare devin primitive JS, tablourile PHP sunt copiate în tablouri și obiecte JS noi, iar rezultatele JS sunt copiate înapoi în tablouri PHP. Modificările făcute de JS într-un tablou convertit nu sunt vizibile în tabloul PHP. Funcțiile apelabile PHP sunt excepția care rămâne activă: devin funcții JS care apelează direct în PHP.
Această secțiune prezintă regulile.
Pagini
- Valori — tabelele de conversie în ambele direcții: numere, șiruri, valori booleene, null/undefined, tablouri, obiecte și valorile care nu se convertesc.
- Funcții gazdă — asociați PHP
callableca funcție JS prin$engine->setGlobal(). Conversia argumentelor, valorile returnate și comportamentul excepțiilor. - Obiecte partajate — ce se întâmplă când transmiteți un obiect PHP către JS în prezent (ajunge ca
undefined) și cum să expuneți starea și comportamentul PHP folosind în schimb tablouri și funcții closure. - Transport fetch — înlocuiți backendul implicit
ext-curlHTTP cu Guzzle, Symfony HttpClient, un mock sau blocarea tuturor cererilor. Include funcția de politică pentru liste de permisiuni, injectarea antetelor și asocierea per client. - Recipient de cookie-uri — atașați un recipient
get(url)/set(url, header)pentru a păstra cookie-urile între cereri fetch. În memorie, Symfony BrowserKit sau un JS-sideMap. - Tipare AbortController — timp de așteptare, cursă, propagare,
AbortSignal.any/.timeoutși modul în care un transport PHP personalizat verifică semnalul în timpul transferului.
Exemplu rapid
PHP
$engine = new Phasis\Engine();
// 1. Bind a PHP callable as a JS function
$engine->setGlobal('greet', fn (string $name) => "Hello, $name!");
echo $engine->eval('greet("world")'); // → Hello, world!
// 2. Let JS change PHP state through a closure
$total = 0;
$engine->setGlobal('add', function (int $n) use (&$total): void { $total += $n; });
$engine->eval('add(2); add(3)');
echo $total; // → 5
// 3. Call a JS function from PHP
$engine->eval('function add(a, b) { return a + b; }');
echo $engine->call('add', 2, 3); // → 5
Consultați și
- API referință — întreaga interfață
Phasis\Engine. - API-uri web — Web Platform Pack și Fetch Pack folosesc același strat de interoperabilitate.