Gå til indhold

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 callable som 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-curl HTTP 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-side Map.
  • 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.