Együttműködés
A Phasis az alkalmazással azonos PHP folyamatban fut, így az értékek a PHP és JavaScript között JSON, csővezetékek vagy egy második futtatókörnyezet nélkül jutnak át. Konverzióval lépik át a határt: a skalárok JS primitívekké alakulnak, a PHP tömbök új JS tömbökbe és objektumokba másolódnak, az JS eredmények pedig PHP tömbökbe másolódnak vissza. Az JS által a konvertált tömbön végzett módosítás nem látszik az PHP tömbben. A PHP hívható elemek kivételt jelentenek, mert aktív kapcsolatban maradnak: JS függvényekké válnak, amelyek közvetlenül a PHP környezetbe hívnak.
Ez a szakasz ismerteti a szabályokat.
Oldalak
- Értékek — a konverziót bemutató táblázatok mindkét irányban: számok, karakterláncok, logikai értékek, null/undefined, tömbök, objektumok és a nem konvertálható értékek.
- Gazdafüggvények — PHP
callablekötése JS függvényként a$engine->setGlobal()segítségével. Argumentumkonverzió, visszatérési értékek és a kivételek kezelése. - Megosztott objektumok — mi történik ma, ha PHP objektumot ad át a JS számára (
undefinedformájában érkezik meg), és hogyan tehetők elérhetővé az PHP állapota és viselkedése tömbökkel és closure-ökkel. - Fetch-átvitel — az alapértelmezett
ext-curlHTTP háttér cseréje Guzzle-re, Symfony HttpClient-ra, mockra vagy mindent letiltó megoldásra. Emellett szabályzati hook engedélyezési listához, fejlécek hozzáadásához és bérlőnkénti kötéshez. - Cookie-tár —
get(url)/set(url, header)tár csatlakoztatása a cookie-k fetch-hívások közötti megőrzéséhez. Memóriában tárolt, Symfony BrowserKit vagy JS oldaliMap. - AbortController-minták — időkorlát, versenyhelyzet, továbbítás,
AbortSignal.any/.timeout, valamint hogy az egyéni PHP átvitel miként kérdezi le a jelet adatátvitel közben.
Gyors példa
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
Lásd még
- API referencia — a teljes
Phasis\Enginefelület. - Webes API-k — a Web Platform Pack és a Fetch Pack ugyanazon az együttműködési rétegen működik.