Interopérabilité
Phasis s’exécute dans le même processus PHP que votre application : les valeurs passent entre PHP et JavaScript sans JSON, canal de communication ni second environnement d’exécution. Elles passent par conversion : les scalaires deviennent des primitives JS, les tableaux PHP sont copiés dans de nouveaux tableaux et objets JS, et les résultats JS sont copiés dans des tableaux PHP. Les modifications apportées par JS à un tableau converti ne sont pas visibles dans le tableau PHP. Les fonctions appelables PHP font exception : elles restent actives et deviennent des fonctions JS qui appellent directement PHP.
Cette section présente les règles.
Pages
- Valeurs — tableaux de conversion dans les deux sens : nombres, chaînes, booléens, null/undefined, tableaux, objets et valeurs non convertibles.
- Fonctions hôtes — liez des fonctions appelables PHP
callablecomme fonction JS via$engine->setGlobal(). Conversion des arguments, valeurs de retour et comportement des exceptions. - Objets partagés — comportement actuel lors du passage d’un objet PHP à JS (il devient
undefined) et exposition de l’état et du comportement PHP au moyen de tableaux et de fermetures. - Transport Fetch — remplacez le backend HTTP
ext-curlpar Guzzle, Symfony HttpClient, un simulateur ou un transport qui refuse tout. Le crochet de politique permet aussi de définir des listes d’autorisation, d’ajouter des en-têtes et d’associer des identifiants par locataire. - Gestionnaire de cookies — montez un gestionnaire
get(url)/set(url, header)pour conserver les cookies entre les requêtes fetch : en mémoire, Symfony BrowserKit ouMapcôté JS. - Modèles AbortController — délai d’expiration, course, propagation,
AbortSignal.any/.timeoutet interrogation du signal en cours de transfert par un transport PHP personnalisé.
Exemple rapide
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
Voir aussi
- Référence API — interface complète
Phasis\Engine. - API Web — Web Platform Pack et Fetch Pack reposent sur la même couche d’interopérabilité.