Ugrás a tartalomhoz

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 callable kö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 (undefined formá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-curl HTTP 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 oldali Map.
  • 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\Engine felület.
  • Webes API-k — a Web Platform Pack és a Fetch Pack ugyanazon az együttműködési rétegen működik.