Взаимодействие
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-curlHTTP с 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 използват един и същ слой за взаимодействие.