Przejdź do treści

Współdziałanie

Phasis działa w tym samym procesie PHP co aplikacja, więc wartości przechodzą między PHP i JavaScript bez JSON, potoków ani drugiego środowiska uruchomieniowego. Są przekazywane przez konwersję: typy skalarne mapują się na typy proste JS, tablice PHP są kopiowane do nowych tablic i obiektów JS, a wyniki JS są kopiowane z powrotem do tablic PHP. Zmiana wprowadzona przez JS w przekonwertowanej tablicy nie jest widoczna w tablicy PHP. Wyjątkiem są funkcje wywoływalne PHP, które pozostają aktywne: stają się funkcjami JS wywołującymi bezpośrednio PHP.

Ta sekcja opisuje te zasady.

Strony

  • Wartości — tabele konwersji w obu kierunkach: liczby, ciągi, wartości logiczne, null/undefined, tablice, obiekty i wartości, których nie można przekonwertować.
  • Funkcje hosta — wiązanie PHP callable jako funkcji JS przez $engine->setGlobal(). Konwersja argumentów, wartości zwracane i obsługa wyjątków.
  • Obiekty współdzielone — co dzieje się obecnie po przekazaniu obiektu PHP do JS (zostaje on przekazany jako undefined) oraz jak udostępniać stan i zachowanie PHP za pomocą tablic i domknięć.
  • Transport fetch — zastąp domyślny backend ext-curl HTTP przez Guzzle, Symfony HttpClient, atrapę lub blokadę wszystkiego. Do tego funkcja zasad obsługująca listy dozwolone, wstrzykiwanie nagłówków i przypisywanie dla poszczególnych dzierżawców.
  • Magazyn plików cookie — podłącz magazyn get(url)/set(url, header), aby zachowywać pliki cookie między wywołaniami fetch. W pamięci, Symfony BrowserKit lub JS-stronny Map.
  • Wzorce AbortController — limit czasu, wyścig, propagacja, AbortSignal.any / .timeout oraz obsługa sygnału przez własny transport PHP podczas transferu.

Szybki przykład

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

Zobacz także