Treci la conținut

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 callable ca 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-curl HTTP 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-side Map.
  • 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.