Μετάβαση στο περιεχόμενο

Εισαγωγή

Το Phasis είναι μηχανή JavaScript εξ ολοκλήρου σε PHP. Αναλύει λεκτικά, συντακτικά και εκτελεί ECMAScript στη διεργασία PHP φιλοξενίας — χωρίς exec('node …'), χωρίς FFI και χωρίς προσαρμοσμένη δυαδική επέκταση. Απαιτεί τρεις τυπικές επεκτάσεις PHP: ext-mbstring, ext-bcmath και ext-curl (την προεπιλεγμένη μεταφορά fetch()). Τα ext-intl και ext-openssl είναι προαιρετικά. Δείτε την ενότητα Ξεκινώντας για εκδόσεις που παραλείπουν το bcmath.

  • Ενσωματώσιμο — ενσωματώστε ένα περιβάλλον εκτέλεσης JS σε οποιαδήποτε εφαρμογή PHP, πλαίσιο ή εργαλείο CLI μέσω της κλάσης Phasis\Engine.
  • Συμβατό με τις προδιαγραφές — περνά την επίσημη σουίτα test262 με ποσοστό 100 %, σε κάθε κατηγορία, χωρίς παραλείψεις.
  • API ιστού — πλήρες Web Platform Pack (URL, TextEncoder/Decoder, atob/btoa, structuredClone, performance, DOMException), πλήρες Fetch Pack (fetch, Request, Response, Headers, Body, AbortController/Signal, Blob, File, FormData, EventTarget, πλήρες WHATWG Streams, navigator), καθώς και crypto + SubtleCrypto, WebSocket, XMLHttpRequest και πραγματικός βρόχος συμβάντων. Περνά το 100 % των εισαγόμενων Web Platform Tests.
  • Σύγχρονες δυνατότητες — συναρτήσεις βέλους, κλάσεις, async/await, Promises, generators, Symbol, BigInt, Proxy, Reflect, Temporal, Intl, TypedArrays, πλήρης υποστήριξη μονάδων.
  • Διαλειτουργία PHP↔JS — περάστε βαθμωτές τιμές και πίνακες PHP στο JS (οι πίνακες αντιγράφονται), συνδέστε συναρτήσεις κλεισίματος PHP ως συναρτήσεις JS και καλέστε συναρτήσεις JS από το PHP. Τα αντικείμενα PHP δεν μπορούν ακόμη να κοινοποιηθούν στο JS· δείτε τα Κοινόχρηστα αντικείμενα.

Γιατί υπάρχει το Phasis

Οι εφαρμογές PHP που χρειάζεται να εκτελούν JavaScript που παρέχουν οι χρήστες — μηχανές προτύπων, βοηθήματα SSR διεπαφής, κανόνες επικύρωσης δεδομένων, απομονωμένα περιβάλλοντα περιεχομένου, headless runners δοκιμών — συνήθως εκκινούν το Node.js ως υποδιεργασία ή παραλείπουν τη δυνατότητα. Και οι δύο επιλογές αυξάνουν τη λειτουργική πολυπλοκότητα: δεύτερο περιβάλλον εκτέλεσης, όριο σειριοποίησης, δίκτυο αγωγών υποδιεργασιών και δύσκολη ιστορία ανάπτυξης για κοινόχρηστη φιλοξενία.

Το Phasis καλύπτει αυτό το κενό. Ο κώδικάς σας PHP μπορεί να αναλύει λεκτικά, συντακτικά και να εκτελεί JavaScript χρησιμοποιώντας μόνο το PHP 8.2+ με τα mbstring, bcmath και curl. Η μηχανή διατίθεται ως πακέτο Composer και εκθέτει ένα μικρό API.

Τι κάνει

  • Υλοποιεί ολόκληρη την τυπική βιβλιοθήκη ECMAScript: Array, String, Object, Math, JSON, Date, RegExp, Map, Set, Promise, Proxy, Reflect, Symbol, BigInt, TypedArray, Temporal, Intl, generators, ασύγχρονοι iterators και μονάδες.
  • Περιλαμβάνει τα API της Web Platform που οι βιβλιοθήκες JS του πραγματικού κόσμου ελέγχουν εκ των προτέρων: URL, URLSearchParams, TextEncoder/TextDecoder, atob/btoa, structuredClone, performance, DOMException. Δείτε τα API ιστού για το πλήρες σύνολο.
  • Περιλαμβάνει το fetch με ολόκληρη την οικογένεια Fetch — Request, Response, Headers, καταναλωτές σώματος, AbortController/AbortSignal, Blob, File, FormData, EventTarget/Event και πλήρες WHATWG Streams (ReadableStream, WritableStream, TransformStream, BYOB, στρατηγικές ουράς). Το πραγματικό HTTP λειτουργεί άμεσα μέσω του ext-curl του PHP.
  • Περιλαμβάνει το crypto και πλήρες SubtleCrypto (οικογένεια SHA, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA, ECDH, HKDF, PBKDF2), WebSocket (RFC 6455 και εναλλάξιμη μεταφορά) και XMLHttpRequest (βασισμένο στην ίδια μεταφορά fetch).
  • Περιλαμβάνει πραγματικό βρόχο συμβάντων: setTimeout, setInterval, clearTimeout, clearInterval, queueMicrotask και Stage-3 AsyncContext για τη διάδοση τιμών πέρα από ασύγχρονα όρια.
  • Υποστηρίζει σύγχρονη σύνταξη — αποδόμηση, spread/rest, υπολογιζόμενες ιδιότητες, προαιρετική αλυσιδωτή πρόσβαση, συνένωση nullish, κυριολεκτικά πρότυπα, επισημασμένα πρότυπα, κλάσεις (με ιδιωτικά πεδία, στατικά μπλοκ, decorators) και await κορυφαίου επιπέδου.
  • Μετατρέπει τιμές ανάμεσα στα όρια PHP↔JS. Οι βαθμωτές τιμές και οι πίνακες αντιγράφονται κατά την είσοδο, τα εκτελέσιμα PHP γίνονται συναρτήσεις JS και τα αποτελέσματα JS επιστρέφουν ως βαθμωτές τιμές και πίνακες PHP. Δείτε τη Μετατροπή τιμών για τους ακριβείς κανόνες.
  • Εκτελείται υπό τον έλεγχο της εφαρμογής φιλοξενίας. Η εφαρμογή φιλοξενίας διαχειρίζεται τη μεταφορά fetch και τα άγκιστρα πολιτικής, ο βρόχος συμβάντων εκτελείται σε εικονικό χρόνο και ένα σταθερό όριο στοίβας κλήσεων σταματά την ανεξέλεγκτη αναδρομή. Υπάρχει όριο επαναλήψεων βρόχου, αλλά δεν επιβάλλεται ακόμη στους βρόχους που εκτελεί η εικονική μηχανή bytecode, ενώ δεν υπάρχουν όρια μήκους συμβολοσειράς, εξόδου ή χρόνου εκτέλεσης· δείτε το API: setLimit.
  • Επαληθεύεται έναντι του Node.js (V8). Το CI εκτελεί τις σουίτες μονάδων και oracle σε κάθε push στο main και σε κάθε αίτημα ενσωμάτωσης, ενώ οι δοκιμές Web Platform και οι σουίτες δημοφιλών πακέτων εκτελούνται όταν αλλάζει ο πηγαίος κώδικας της μηχανής· ο πλήρης πίνακας test262 εκτελείται χειροκίνητα και το στιγμιότυπό του υποβάλλεται στο COMPAT.md. Δείτε τη Συμβατότητα.

Τι δεν είναι

Το Phasis δεν είναι μεταγλωττιστής JIT. Είναι διερμηνευτής διάσχισης δέντρου με προαιρετική εικονική μηχανή bytecode. Σε φόρτους εργασίας που περιορίζονται από τη διανομή εντολών, αναμένετε χρόνο εκτέλεσης περίπου 100× σε σχέση με το V8. Το αντάλλαγμα είναι μηδενικές εξαρτήσεις, καθαρό PHP και εκτέλεση υπό τον έλεγχο της εφαρμογής φιλοξενίας — ιδανικό για ενσωμάτωση του JavaScript σε εφαρμογές PHP όπου η ορθότητα και η απομόνωση έχουν μεγαλύτερη σημασία από την ακατέργαστη απόδοση.

Από πού να ξεκινήσετε

  • Ξεκινώντας — εγκαταστήστε και εκτελέστε το πρώτο σας σενάριο.
  • CLI — bin/phasis για εκτέλεση αρχείων, αξιολόγηση πηγαίου κώδικα και εξαγωγή του AST.
  • API — ενσωματώστε το Phasis\Engine στην εφαρμογή PHP σας.
  • Διαλειτουργία — περάστε τιμές PHP και εκτελέσιμα στο JavaScript.
  • Συμβατότητα — κάλυψη test262 και υποστηριζόμενες λειτουργίες.
  • Αναλυτής — αναλύστε το JavaScript σε τυποποιημένο AST ή ESTree χωρίς να το εκτελέσετε.
  • Μορφοποιητής — μορφοποιήστε JavaScript, JSON και CSS με διάταξη συμβατή με το prettier.
  • Για προχωρημένους — αρχιτεκτονική, εικονική μηχανή bytecode, σημεία αναφοράς και μοντέλο δοκιμών oracle.