Vai al contenuto

Interoperabilità

Phasis viene eseguito nello stesso processo PHP dell'applicazione, quindi i valori passano tra PHP e JavaScript senza JSON, pipe o un secondo runtime. Il passaggio avviene tramite conversione: gli scalari diventano primitive JS, gli array PHP vengono copiati in nuovi array e oggetti JS, mentre i risultati JS vengono copiati in array PHP. Le modifiche apportate da JS a un array convertito non sono visibili nell'array PHP. Le funzioni richiamabili PHP sono l'eccezione che rimane attiva: diventano funzioni JS che chiamano direttamente PHP.

Questa sezione illustra le regole.

Pagine

  • Valori — le tabelle di conversione in entrambe le direzioni: numeri, stringhe, booleani, null/undefined, array, oggetti e valori che non vengono convertiti.
  • Funzioni host — associa PHP callable come funzione JS tramite $engine->setGlobal(). Conversione degli argomenti, valori restituiti e comportamento delle eccezioni.
  • Oggetti condivisi — cosa succede oggi quando passi un oggetto PHP a JS (viene ricevuto come undefined) e come esporre stato e comportamento PHP usando invece array e closure.
  • Trasporto Fetch — sostituisci il backend predefinito ext-curl HTTP con Guzzle, Symfony HttpClient, un mock o un'opzione che nega tutto. Include anche l'hook per le policy di allowlist, l'inserimento di header e l'associazione per tenant.
  • Archivio cookie — configura un archivio get(url)/set(url, header) per mantenere i cookie tra le richieste fetch. In memoria, Symfony BrowserKit oppure un JS lato server Map.
  • Schemi con AbortController — timeout, race, propagazione, AbortSignal.any / .timeout e modalità con cui un trasporto PHP personalizzato controlla il segnale durante il trasferimento.

Esempio rapido

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

Vedi anche

  • API riferimento — l'intera superficie Phasis\Engine.
  • API Web — Web Platform Pack e Fetch Pack si basano sullo stesso livello di interoperabilità.