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
callablejako 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-curlHTTP 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-stronnyMap. - Wzorce AbortController — limit czasu, wyścig, propagacja,
AbortSignal.any/.timeoutoraz 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
- API dokumentacja referencyjna — pełny zakres
Phasis\Engine. - API internetowe — Web Platform Pack i Fetch Pack działają na tej samej warstwie interoperacyjności.