Preskočiť na obsah

Prepojenie

Phasis beží v tom istom procese PHP ako vaša aplikácia, takže hodnoty prechádzajú medzi PHP a JavaScript bez JSON, rúr alebo druhého behového prostredia. Prenášajú sa prevodom: skalárne hodnoty sa mapujú na primitívne hodnoty JS, polia PHP sa kopírujú do nových polí a objektov JS a výsledky JS sa kopírujú späť do polí PHP. Zmena vykonaná v poli JS sa v poli PHP neprejaví. Výnimkou sú volateľné objekty PHP, ktoré zostávajú aktívne: stanú sa funkciami JS volajúcimi priamo do PHP.

Táto časť opisuje pravidlá.

Stránky

  • Hodnoty — tabuľky prevodu oboma smermi: čísla, reťazce, logické hodnoty, null/undefined, polia, objekty a hodnoty, ktoré sa previesť nedajú.
  • Funkcie hostiteľa — priraďte PHP callable ako funkciu JS cez $engine->setGlobal(). Prevod argumentov a návratových hodnôt a správanie výnimiek.
  • Zdieľané objekty — čo sa dnes stane, keď odovzdáte objekt PHP do JS (dostane sa tam ako undefined) a ako namiesto toho sprístupniť stav a správanie PHP pomocou polí a uzávierok.
  • Transport fetch — nahraďte predvolený backend ext-curl HTTP za Guzzle, Symfony HttpClient, napodobeninu alebo úplné blokovanie. Navyše hák politiky na zoznamy povolených, vkladanie hlavičiek a priraďovanie podľa nájomcu.
  • Úložisko súborov cookie — pripojte úložisko get(url)/set(url, header) na uchovávanie súborov cookie medzi požiadavkami fetch. V pamäti, Symfony BrowserKit alebo úložisko Map na strane JS.
  • Vzory používania AbortController — časové limity, preteky, propagácia, AbortSignal.any / .timeout a spôsob, akým vlastný transport PHP kontroluje signál počas prenosu.

Rýchly príklad

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

Pozrite si aj

  • API referencia — celé Phasis\Engine rozhranie.
  • Web APIs — Web Platform Pack a Fetch Pack využívajú rovnakú vrstvu interoperability.