Samspil
Phasis kører i samme PHP-proces som din applikation, så værdier krydser mellem PHP og JavaScript uden JSON, pipes eller en ekstra runtime. De krydser ved konvertering: skalære værdier bliver til primitive JS-værdier, PHP-arrays kopieres til nye JS-arrays og -objekter, og JS-resultater kopieres tilbage til PHP-arrays. En ændring, som JS foretager i et konverteret array, kan ikke ses i PHP-arrayet. PHP-callables er undtagelsen, der forbliver aktive: de bliver til JS-funktioner, der kalder direkte ind i PHP.
Dette afsnit gennemgår reglerne.
Sider
- Værdier — konverteringstabellerne i begge retninger: tal, strenge, booleske værdier, null/undefined, arrays, objekter og værdier, der ikke kan konverteres.
- Værtsfunktioner — bind PHP
callablesom JS-funktion via$engine->setGlobal(). Argumentkonvertering, returværdier og undtagelseshåndtering. - Delte objekter — hvad der sker, når du giver et PHP-objekt til JS i dag (det ankommer som
undefined), og hvordan du eksponerer PHP-tilstand og -adfærd med arrays og closure-funktioner i stedet. - Fetch-transport — udskift standardbackend til
ext-curlHTTP med Guzzle, Symfony HttpClient, en mock eller en løsning, der afviser alt. Plus en politik-hook til tilladelseslister, indsættelse af headers og binding pr. lejer. - Cookiejar — tilslut en
get(url)/set(url, header)-jar for at bevare cookies mellem fetches. I hukommelsen, Symfony BrowserKit eller en JS-sideMap. - AbortController-mønstre — timeout, kapløb, videresendelse,
AbortSignal.any/.timeout, og hvordan en brugerdefineret PHP-transport aflæser signalet under overførslen.
Hurtigt eksempel
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
Se også
- API-reference — hele
Phasis\Engine-overfladen. - Web-API'er — Web Platform Pack og Fetch Pack bygger oven på det samme samspilslag.