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
callablecome 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-curlHTTP 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 serverMap. - Schemi con AbortController — timeout, race, propagazione,
AbortSignal.any/.timeoute 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à.