Přejít k obsahu

Propojení

Phasis běží ve stejném procesu PHP jako vaše aplikace, takže hodnoty přecházejí mezi PHP a JavaScript bez JSON, rour nebo druhého běhového prostředí. Přecházejí prostřednictvím převodu: skaláry se mapují na primitivní hodnoty JS, pole PHP se kopírují do nových polí a objektů JS a výsledky JS se kopírují zpět do polí PHP. Změna, kterou JS provede v převedeném poli, se v poli PHP neprojeví. Výjimkou jsou volatelné objekty PHP, které zůstávají živé: stanou se funkcemi JS, jež volají přímo do PHP.

Tato část popisuje pravidla.

Stránky

  • Hodnoty — tabulky převodu oběma směry: čísla, řetězce, logické hodnoty, null/undefined, pole, objekty a hodnoty, které převést nelze.
  • Hostitelské funkce — navázání PHP callable jako funkce JS pomocí $engine->setGlobal(). Převod argumentů, návratové hodnoty a chování výjimek.
  • Sdílené objekty — co se dnes stane, když předáte objekt PHP do JS (převede se na undefined) a jak zpřístupnit stav a chování PHP pomocí polí a uzávěrů.
  • Fetch transport — nahrazení výchozího backendu ext-curl HTTP za Guzzle, Symfony HttpClient, mock nebo úplné zamítnutí. Také háček pro pravidla povolených položek, vkládání hlaviček a vazby pro jednotlivé tenanty.
  • Úložiště cookies — připojení úložiště get(url)/set(url, header) pro uchovávání cookies mezi požadavky fetch. V paměti, Symfony BrowserKit nebo JS Map.
  • Vzory AbortController — časový limit, závod, předávání signálu, AbortSignal.any / .timeout a způsob, jakým vlastní transport PHP kontroluje signál během přenosu.

Rychlý pří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

Viz také