Interoperabilidade
Phasis é executado no mesmo processo PHP que sua aplicação, então os valores passam entre PHP e JavaScript sem JSON, pipes ou um segundo runtime. Eles passam por conversão: escalares são mapeados para valores primitivos JS, arrays PHP são copiados para novos arrays e objetos JS, e os resultados JS são copiados de volta para arrays PHP. Uma alteração feita por JS em um array convertido não fica visível no array PHP. Callables PHP são a exceção que permanece ativa: tornam-se funções JS que chamam diretamente PHP.
Esta seção apresenta as regras.
Páginas
- Valores — tabelas de conversão nos dois sentidos: números, strings, booleanos, null/undefined, arrays, objetos e valores que não são convertidos.
- Funções hospedeiras — vincular PHP
callablecomo função JS por meio de$engine->setGlobal(). Conversão de argumentos, valores de retorno e comportamento das exceções. - Objetos compartilhados — o que acontece quando você passa um objeto PHP para JS atualmente (ele chega como
undefined) e como expor estado e comportamento PHP usando arrays e closures. - Transporte Fetch — substituir o backend
ext-curlHTTP padrão por Guzzle, Symfony HttpClient, um mock ou uma opção que nega tudo. Inclui também o gancho de política para listas de permissões, injeção de cabeçalhos e vinculação por locatário. - Armazenamento de cookies — montar um armazenamento
get(url)/set(url, header)para persistir cookies entre chamadas fetch. Em memória, Symfony BrowserKit ou um JS do lado doMap. - Padrões de AbortController — timeout, corrida, propagação,
AbortSignal.any/.timeoute como um transporte PHP personalizado verifica o sinal durante a transferência.
Exemplo 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
Veja também
- API referência — toda a superfície
Phasis\Engine. - APIs da Web — Web Platform Pack e Fetch Pack usam a mesma camada de interoperabilidade.