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
callablekaip 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-curlHTTP 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 veikiantisMap. - AbortController šablonai — skirtasis laikas, lenktynės, perdavimas,
AbortSignal.any/.timeoutir 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\EngineAPI sąsaja. - Žiniatinklio API — „Web Platform Pack“ ir „Fetch Pack“ veikia tame pačiame sąveikumo sluoksnyje.