Взаємодія систем
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, мок або повну заборону. Також розглянуто хук політики для списків дозволених елементів, додавання заголовків і прив’язування до окремих клієнтів. - Сховище cookie — підключення сховища
get(url)/set(url, header)для збереження cookie між запитами 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 працюють на тому самому рівні взаємодії систем.