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
callableako 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-curlHTTP 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žiskoMapna strane JS. - Vzory používania AbortController — časové limity, preteky, propagácia,
AbortSignal.any/.timeouta 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\Enginerozhranie. - Web APIs — Web Platform Pack a Fetch Pack využívajú rovnakú vrstvu interoperability.