Перейти до вмісту

Взаємодія систем

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, мок або повну заборону. Також розглянуто хук політики для списків дозволених елементів, додавання заголовків і прив’язування до окремих клієнтів.
  • Сховище 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 працюють на тому самому рівні взаємодії систем.