Към съдържанието

Взаимодействие

Phasis работи в същия процес PHP като приложението ви, така че стойностите преминават между PHP и JavaScript без JSON, канали или втора среда за изпълнение. Те преминават чрез преобразуване: скаларите съответстват на примитиви JS, масивите PHP се копират в нови масиви и обекти JS, а резултатите JS се копират обратно в масиви PHP. Промяна, направена от JS, в преобразуван масив не се вижда в масива PHP. Извикваемите обекти PHP са изключението, което остава активно: те стават функции JS, които извикват директно PHP.

Този раздел разглежда правилата.

Страници

  • Стойности — таблиците за преобразуване в двете посоки: числа, низове, булеви стойности, null/undefined, масиви, обекти и стойности, които не се преобразуват.
  • Хост функции — свързване на извикваеми обекти PHP callable като функция JS чрез $engine->setGlobal(). Преобразуване на аргументи, връщани стойности и поведение при изключения.
  • Споделени обекти — какво се случва, когато днес подадете обект PHP на JS (пристига като undefined) и как да предоставяте състояние и поведение PHP чрез масиви и затваряния.
  • Транспорт за fetch — заменете стандартния бекенд ext-curl HTTP с Guzzle, Symfony HttpClient, фиктивен или такъв, който отказва всички заявки. Включва и политика за списък с разрешени адреси, добавяне на заглавки и обвързване с отделен клиент.
  • Хранилище за бисквитки — монтирайте хранилище get(url)/set(url, header), за да запазвате бисквитките между fetch заявките. В паметта, Symfony BrowserKit или JS от страната на Map.
  • Модели с AbortController — изчакване, надпревара, предаване, AbortSignal.any / .timeout и как персонализиран транспорт PHP проверява сигнала по време на прехвърлянето.

Кратък пример

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

Вижте също

  • Справочник на API — пълната повърхност Phasis\Engine.
  • Уеб API — Web Platform Pack и Fetch Pack използват един и същ слой за взаимодействие.