Pereiti prie turinio

Sąveika

Phasis veikia tame pačiame PHP procese kaip jūsų programa, todėl reikšmės perduodamos tarp PHP ir JavaScript be JSON, vamzdžių ar antro vykdymo aplinkos egzemplioriaus. Jos perduodamos konvertuojant: skaliarinės reikšmės atitinka JS primityviąsias reikšmes, PHP masyvai nukopijuojami į naujus JS masyvus bei objektus, o JS rezultatai nukopijuojami atgal į PHP masyvus. JS atliktas pakeitimas konvertuotame masyve PHP masyve neatsispindi. Išimtis — PHP iškviečiamieji objektai, kurie išlieka aktyvūs: jie tampa JS funkcijomis, tiesiogiai iškviečiančiomis PHP.

Šiame skyriuje aptariamos taisyklės.

Puslapiai

  • Reikšmės — abiejų krypčių konvertavimo lentelės: skaičiai, eilutės, loginės reikšmės, null/undefined, masyvai, objektai ir nekonvertuojamos reikšmės.
  • Pagrindinės programos funkcijos — susiekite PHP callable kaip JS funkciją per $engine->setGlobal(). Argumentų konvertavimas, grąžinamos reikšmės ir išimčių veikimas.
  • Bendrinami objektai — kas nutinka, kai šiandien perduodate PHP objektą į JS (jis gaunamas kaip undefined) ir kaip vietoj jo pateikti PHP būseną bei veikimą naudojant masyvus ir uždarąsias funkcijas.
  • Fetch transportas — pakeiskite numatytąją ext-curl HTTP posistemę į Guzzle, Symfony HttpClient, imitacinį transportą arba viską draudžiančią konfigūraciją. Taip pat aptariamas politikos kablys leidžiamų adresų sąrašams, antraščių įterpimui ir kiekvienam nuomininkui skirtam susiejimui.
  • Slapukų saugykla — prijunkite get(url)/set(url, header) saugyklą, kad slapukai būtų išsaugomi tarp fetch užklausų. Ji gali būti atmintyje, Symfony BrowserKit arba JS pusėje veikiantis Map.
  • AbortController šablonai — skirtasis laikas, lenktynės, perdavimas, AbortSignal.any / .timeout ir tai, kaip tinkintas PHP transportas perdavimo metu tikrina signalą.

Trumpas pavyzdys

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

Taip pat žr.

  • API nuoroda — visa Phasis\Engine API sąsaja.
  • Žiniatinklio API — „Web Platform Pack“ ir „Fetch Pack“ veikia tame pačiame sąveikumo sluoksnyje.