Διαλειτουργικότητα
Το Phasis εκτελείται στην ίδια διεργασία PHP με την εφαρμογή σας, επομένως οι τιμές περνούν μεταξύ PHP και JavaScript χωρίς JSON, σωλήνες ή δεύτερο περιβάλλον εκτέλεσης. Περνούν μέσω μετατροπής: οι βαθμωτές τιμές αντιστοιχίζονται σε πρωτογενείς τιμές JS, οι πίνακες PHP αντιγράφονται σε νέους πίνακες και αντικείμενα JS, ενώ τα αποτελέσματα JS αντιγράφονται πίσω σε πίνακες PHP. Μια αλλαγή που κάνει το JS σε έναν μετατρεμμένο πίνακα δεν είναι ορατή στον πίνακα PHP. Οι κλήσιμες συναρτήσεις PHP αποτελούν την εξαίρεση που παραμένει ενεργή: γίνονται συναρτήσεις JS που καλούν απευθείας το PHP.
Αυτή η ενότητα καλύπτει τους κανόνες.
Σελίδες
- Τιμές — πίνακες μετατροπής και προς τις δύο κατευθύνσεις: αριθμοί, συμβολοσειρές, boolean, null/undefined, πίνακες, αντικείμενα και τιμές που δεν μετατρέπονται.
- Συναρτήσεις υποδοχής — συνδέστε κλήσιμες συναρτήσεις PHP
callableως συναρτήσεις JS μέσω του$engine->setGlobal(). Μετατροπή ορισμάτων, τιμές επιστροφής και συμπεριφορά εξαιρέσεων. - Κοινόχρηστα αντικείμενα — τι συμβαίνει σήμερα όταν περνάτε αντικείμενο PHP στο JS (φτάνει ως
undefined) και πώς να εκθέτετε κατάσταση και συμπεριφορά PHP με πίνακες και κλεισίματα. - Μεταφορά Fetch — αντικαταστήστε το προεπιλεγμένο backend
ext-curlHTTP με Guzzle, Symfony HttpClient, mock ή πλήρη αποκλεισμό. Περιλαμβάνει hook πολιτικής για λίστες επιτρεπόμενων, εισαγωγή κεφαλίδων και σύνδεση ανά μισθωτή. - Cookie jar — προσαρτήστε jar
get(url)/set(url, header)για διατήρηση cookies μεταξύ fetch. Στη μνήμη, Symfony BrowserKit ή JS-sideMap. - Μοτίβα AbortController — χρονικό όριο, αγώνας, διάδοση,
AbortSignal.any/.timeoutκαι πώς μια προσαρμοσμένη μεταφορά PHP ελέγχει το σήμα κατά τη μεταφορά.
Γρήγορο παράδειγμα
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
Δείτε επίσης
- Αναφορά API — ολόκληρη η επιφάνεια του
Phasis\Engine. - Web APIs — τα Web Platform Pack και Fetch Pack βασίζονται στο ίδιο επίπεδο διαλειτουργικότητας.