Interoperabilidad
Phasis se ejecuta en el mismo proceso PHP que tu aplicación, así que los valores pasan entre PHP y JavaScript sin JSON, tuberías ni un segundo entorno de ejecución. Pasan mediante conversión: los escalares se asignan a primitivos JS, los arrays PHP se copian en nuevos arrays y objetos JS, y los resultados JS se copian de vuelta en arrays PHP. Los cambios que JS hace en un array convertido no se reflejan en el array PHP. Las funciones invocables PHP son la excepción que permanece activa: se convierten en funciones JS que llaman directamente a PHP.
Esta sección explica las reglas.
Páginas
- Valores — tablas de conversión en ambas direcciones: números, cadenas, booleanos, null/undefined, arrays, objetos y valores que no se convierten.
- Funciones del host — conecta funciones invocables PHP
callablecomo función JS mediante$engine->setGlobal(). Conversión de argumentos, valores devueltos y comportamiento de las excepciones. - Objetos compartidos — qué ocurre hoy al pasar un objeto PHP a JS (llega como
undefined) y cómo exponer el estado y el comportamiento de PHP mediante arrays y cierres. - Transporte Fetch — sustituye el backend
ext-curlHTTP predeterminado por Guzzle, Symfony HttpClient, un simulador o un bloqueo total. También incluye el hook de política para listas de permitidos, inyección de encabezados y vinculación por inquilino. - Almacén de cookies — añade un almacén
get(url)/set(url, header)para conservar cookies entre solicitudes fetch. En memoria, Symfony BrowserKit oMapdel lado de JS. - Patrones de AbortController — tiempos de espera, carreras, propagación,
AbortSignal.any/.timeouty cómo un transporte PHP personalizado comprueba la señal durante la transferencia.
Ejemplo rápido
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
Véase también
- Referencia de API — interfaz completa de
Phasis\Engine. - API web — Web Platform Pack y Fetch Pack se basan en la misma capa de interoperabilidad.