Γεννήτρια κώδικα PHP
- Υποστηρίζει όλα τα τελευταία χαρακτηριστικά της PHP (όπως αγκίστρια ιδιοτήτων, enums, attributes, κ.λπ.)
- Σας επιτρέπει να τροποποιείτε εύκολα τις υπάρχουσες κλάσεις
- Έξοδος συμβατή με το στυλ κωδικοποίησης PSR-12 / PER
- Ώριμη, σταθερή και ευρέως χρησιμοποιούμενη βιβλιοθήκη
Εγκατάσταση
Κατεβάστε και εγκαταστήστε το πακέτο χρησιμοποιώντας το Composer:
Για τη συμβατότητα με την PHP, δείτε τον πίνακα.
Κλάσεις
Ας ξεκινήσουμε με ένα απλό παράδειγμα δημιουργίας κλάσης με τη χρήση του ClassType:
Θα αποδώσει αυτό το αποτέλεσμα:
τον οποίο, σε αντίθεση με το echo $class
, θα μπορούμε να διαμορφώσουμε περαιτέρω:
Μπορούμε να προσθέσουμε σταθερές (κλάση Constant) και ιδιότητες (κλάση Property):
Δημιουργεί:
Και μπορούμε να προσθέσουμε μεθόδους:
Αυτό έχει ως αποτέλεσμα:
Οι προωθημένες παράμετροι που εισήχθησαν από την PHP 8.0 μπορούν να περάσουν στον κατασκευαστή:
Αυτό έχει ως αποτέλεσμα:
Οι ιδιότητες και οι κλάσεις που είναι μόνο για ανάγνωση μπορούν να
επισημανθούν μέσω της διεύθυνσης setReadOnly()
.
Αν η προστιθέμενη ιδιότητα, σταθερά, μέθοδος ή παράμετρος υπάρχει ήδη, τότε θα εκπέμψει εξαίρεση.
Τα μέλη μπορούν να αφαιρεθούν με τη χρήση removeProperty()
,
removeConstant()
, removeMethod()
ή removeParameter()
.
Μπορείτε επίσης να προσθέσετε υπάρχοντα αντικείμενα Method
,
Property
ή Constant
στην κλάση:
Μπορείτε να κλωνοποιήσετε υπάρχουσες μεθόδους, ιδιότητες και
σταθερές με διαφορετικό όνομα χρησιμοποιώντας το cloneWithName()
:
Διεπαφή ή γνώρισμα
Μπορείτε να δημιουργήσετε διασυνδέσεις και γνωρίσματα (κλάσεις InterfaceType και TraitType):
Χρήση γνωρισμάτων:
Αποτέλεσμα:
Enums
Μπορείτε εύκολα να δημιουργήσετε τα enums που φέρνει η PHP 8.1 (κλάση EnumType):
Αποτέλεσμα:
Μπορείτε επίσης να ορίσετε κλιμακωτά ισοδύναμα για τις περιπτώσεις για να δημιουργήσετε ένα υποστηριζόμενο enum:
Είναι δυνατόν να προσθέσετε ένα σχόλιο ή χαρακτηριστικά σε κάθε περίπτωση χρησιμοποιώντας το
addComment()
ή το addAttribute()
.
Ανώνυμη κλάση
Δώστε το όνομα null
και έχετε μια ανώνυμη κλάση:
Αποτέλεσμα:
Παγκόσμια Λειτουργία
Ο κώδικας των συναρτήσεων θα δημιουργήσει την κλάση GlobalFunction:
Αποτέλεσμα:
Κλείσιμο
Ο κώδικας των closures θα δημιουργήσει την κλάση Closure:
Αποτέλεσμα:
Βέλος Συνάρτηση
Μπορείτε επίσης να εκτυπώσετε το κλείσιμο ως λειτουργία βέλους χρησιμοποιώντας εκτυπωτή:
Αποτέλεσμα:
Υπογραφή μεθόδου και συνάρτησης
Οι μέθοδοι αντιπροσωπεύονται από την κλάση Method. Μπορείτε να ορίσετε την ορατότητα, την τιμή επιστροφής, να προσθέσετε σχόλια, χαρακτηριστικά κ.λπ:
Κάθε παράμετρος αναπαρίσταται από μια κλάση Parameter. Και πάλι, μπορείτε να ορίσετε κάθε δυνατή ιδιότητα:
Για να ορίσετε τις λεγόμενες παραμέτρους variadics (ή επίσης τον τελεστή
splat, spread, ellipsis, unpacking ή three dots), χρησιμοποιήστε setVariadic()
:
Generates:
Σώμα μεθόδου και συνάρτησης
Το σώμα μπορεί να περάσει στη μέθοδο setBody()
αμέσως ή διαδοχικά
(γραμμή προς γραμμή) καλώντας επανειλημμένα τη μέθοδο addBody()
:
Αποτέλεσµα
Μπορείτε να χρησιμοποιήσετε ειδικά placeholders για εύχρηστο τρόπο εισαγωγής μεταβλητών.
Απλά πλαίσια θέσης ?
Αποτέλεσμα:
Variadic placeholder ...?
Αποτέλεσμα:
Μπορείτε επίσης να χρησιμοποιήσετε ονομαστικές παραμέτρους PHP
8 χρησιμοποιώντας placeholder ...?:
Αποφύγετε το placeholder χρησιμοποιώντας slash \?
Αποτέλεσμα:
Εκτυπωτές και συμμόρφωση PSR
Η κλάση Printer χρησιμοποιείται για τη δημιουργία κώδικα PHP:
Μπορεί να παράγει κώδικα για όλα τα άλλα στοιχεία, προσφέροντας
μεθόδους όπως printFunction()
, printNamespace()
, κ.λπ.
Επιπλέον, είναι διαθέσιμη η κλάση PsrPrinter
, της οποίας η έξοδος
είναι σύμφωνη με το στυλ κωδικοποίησης PSR-2 / PSR-12 / PER:
Χρειάζεται να ρυθμίσετε τη συμπεριφορά σας ανάλογα με τις ανάγκες
σας; Δημιουργήστε τον δικό σας εκτυπωτή κληρονομώντας την κλάση
Printer
. Μπορείτε να ρυθμίσετε εκ νέου αυτές τις μεταβλητές:
Πώς και γιατί ακριβώς διαφέρουν τα πρότυπα Printer
και
PsrPrinter
; Γιατί δεν υπάρχει μόνο ένας εκτυπωτής, ο PsrPrinter
, στο
πακέτο;
Το πρότυπο Printer
μορφοποιεί τον κώδικα όπως τον κάνουμε σε όλη
τη Nette. Δεδομένου ότι η Nette δημιουργήθηκε πολύ νωρίτερα από το PSR, και
επίσης επειδή το PSR για πολλά χρόνια δεν παρέδιδε τα πρότυπα εγκαίρως,
αλλά μερικές φορές ακόμη και με καθυστέρηση αρκετών ετών από την
εισαγωγή ενός νέου χαρακτηριστικού στην PHP, αυτό είχε ως αποτέλεσμα
μερικές μικρές διαφορές στο πρότυπο
κωδικοποίησης. Η μεγαλύτερη διαφορά είναι απλώς η χρήση των tabs αντί
των κενών. Γνωρίζουμε ότι με τη χρήση tabs στα έργα μας επιτρέπουμε την
προσαρμογή του πλάτους, κάτι που είναι απαραίτητο για τα άτομα
με προβλήματα όρασης. Ένα παράδειγμα μιας μικρής διαφοράς είναι η
τοποθέτηση της καμπύλης αγκύλης σε ξεχωριστή γραμμή για τις
συναρτήσεις και τις μεθόδους και πάντα. Θεωρούμε ότι η σύσταση του PSR
είναι παράλογη και οδηγεί σε μείωση της
σαφήνειας του κώδικα.
Τύποι
Κάθε τύπος ή τύπος ένωσης/διασταύρωσης μπορεί να περάσει ως συμβολοσειρά, μπορείτε επίσης να χρησιμοποιήσετε προκαθορισμένες σταθερές για εγγενείς τύπους:
Το ίδιο ισχύει και για τη μέθοδο setReturnType()
.
Κυριολεκτικά
Με το Literal
μπορείτε να περάσετε αυθαίρετο κώδικα PHP, για
παράδειγμα, σε προεπιλεγμένες τιμές ιδιοτήτων ή παραμέτρων κ.λπ:
Αποτέλεσμα:
Μπορείτε επίσης να περάσετε παραμέτρους στη διεύθυνση Literal
και να τις μορφοποιήσετε σε έγκυρο κώδικα PHP χρησιμοποιώντας ειδικούς συμπαραστάτες:
Το λεκτικό που αντιπροσωπεύει τη δημιουργία ενός νέου αντικειμένου
παράγεται εύκολα από τη μέθοδο new
:
Χαρακτηριστικά
Μπορείτε να προσθέσετε χαρακτηριστικά της PHP 8 σε όλες τις κλάσεις, μεθόδους, ιδιότητες, σταθερές, περιπτώσεις enum, συναρτήσεις, κλεισίματα και παραμέτρους. Οι κυριολεκτικοί χαρακτήρες μπορούν επίσης να χρησιμοποιηθούν ως τιμές παραμέτρων.
Αποτέλεσμα:
Άγκιστρα ιδιοκτησίας
Μπορείτε επίσης να ορίσετε άγκιστρα ιδιοτήτων (που αντιπροσωπεύονται από την κλάση PropertyHook) για λειτουργίες get και set, ένα χαρακτηριστικό που εισήχθη στην PHP 8.4:
Αυτό παράγει:
Ιδιότητες και άγκιστρα ιδιοτήτων μπορούν να είναι αφηρημένες ή τελικές:
Ασύμμετρη ορατότητα
Η PHP 8.4 εισάγει την ασύμμετρη ορατότητα για τις ιδιότητες. Μπορείτε να ορίσετε διαφορετικά επίπεδα πρόσβασης για ανάγνωση και εγγραφή.
Η ορατότητα μπορεί να οριστεί είτε χρησιμοποιώντας τη μέθοδο
setVisibility()
με δύο παραμέτρους, είτε χρησιμοποιώντας τις μεθόδους
setPublic()
, setProtected()
ή setPrivate()
με την παράμετρο
mode
που καθορίζει αν η ορατότητα ισχύει για τη λήψη ή τη ρύθμιση
της ιδιότητας. Η προεπιλεγμένη λειτουργία είναι η 'get'
.
Αυτό δημιουργεί:
Χώρος ονομάτων
Οι κλάσεις, τα γνωρίσματα, οι διεπαφές και τα enums (εφεξής κλάσεις) μπορούν να ομαδοποιηθούν σε χώρους ονομάτων (PhpNamespace):
Εάν η κλάση υπάρχει ήδη, πετάει εξαίρεση.
Μπορείτε να ορίσετε δηλώσεις χρήσης:
Χρησιμοποιήστε τη μέθοδο simplifyName
για να απλοποιήσετε ένα όνομα
κλάσης, συνάρτησης ή σταθεράς με πλήρη προσόντα σύμφωνα με τα
καθορισμένα ψευδώνυμα:
Αντίθετα, μπορείτε να μετατρέψετε ένα απλοποιημένο όνομα κλάσης,
συνάρτησης ή σταθεράς σε όνομα με πλήρη προσόντα χρησιμοποιώντας τη
μέθοδο resolveName
:
Επίλυση ονομάτων κλάσεων
Όταν μια κλάση είναι μέρος ενός χώρου ονομάτων, αποδίδεται ελαφρώς διαφορετικά: όλοι οι τύποι (π.χ. υποδείξεις τύπου, τύποι επιστροφής, όνομα γονικής κλάσης, υλοποιημένες διασυνδέσεις, χρησιμοποιούμενα γνωρίσματα και χαρακτηριστικά) επιλύονται αυτόματα (εκτός αν το απενεργοποιήσετε, δείτε παρακάτω). Αυτό σημαίνει ότι πρέπει να χρησιμοποιείτε πλήρως προσδιορισμένα ονόματα κλάσεων στους ορισμούς, και θα αντικατασταθούν με ψευδώνυμα (με βάση τις ρήτρες χρήσης) ή πλήρως προσδιορισμένα ονόματα στον κώδικα που θα προκύψει:
Αποτέλεσμα:
Η αυτόματη ανάλυση μπορεί να απενεργοποιηθεί με αυτόν τον τρόπο:
PHP Files
Οι κλάσεις, οι συναρτήσεις και οι χώροι ονομάτων μπορούν να ομαδοποιηθούν σε αρχεία PHP που αντιπροσωπεύονται από την κλάση PhpFile:
Αποτέλεσμα:
Παρακαλώ σημειώστε: Δεν μπορεί να προστεθεί πρόσθετος κώδικας στα αρχεία εκτός των συναρτήσεων και των κλάσεων.
Δημιουργία σύμφωνα με τις υπάρχουσες
Εκτός από τη δυνατότητα μοντελοποίησης κλάσεων και συναρτήσεων χρησιμοποιώντας το API που περιγράφηκε παραπάνω, μπορείτε επίσης να τις δημιουργήσετε αυτόματα με βάση τις υπάρχουσες:
Τα σώματα συναρτήσεων και μεθόδων είναι κενά από προεπιλογή. Αν
θέλετε να τα φορτώσετε και αυτά, χρησιμοποιήστε αυτόν τον τρόπο
(απαιτεί την εγκατάσταση του nikic/php-parser
):
Φορτώνοντας από αρχείο PHP
Μπορείτε επίσης να φορτώσετε συναρτήσεις, κλάσεις, διεπαφές και enums
απευθείας από μια συμβολοσειρά κώδικα PHP. Για παράδειγμα, δημιουργούμε
το αντικείμενο ClassType
με αυτόν τον τρόπο:
Όταν φορτώνετε κλάσεις από κώδικα PHP, τα σχόλια μιας γραμμής εκτός των σωμάτων των μεθόδων αγνοούνται (π.χ. για τις ιδιότητες κ.λπ.), επειδή αυτή η βιβλιοθήκη δεν διαθέτει API για να δουλέψει με αυτά.
Μπορείτε επίσης να φορτώσετε απευθείας ολόκληρο το αρχείο PHP, το οποίο μπορεί να περιέχει οποιονδήποτε αριθμό κλάσεων, συναρτήσεων ή ακόμα και πολλαπλά namespaces:
Το αρχικό σχόλιο του αρχείου και η δήλωση strict_types
φορτώνονται
επίσης. Από την άλλη πλευρά, όλος ο υπόλοιπος παγκόσμιος κώδικας
αγνοείται.
Αυτό απαιτεί την εγκατάσταση του nikic/php-parser
.
Αν πρέπει να χειριστείτε συνολικό κώδικα σε αρχεία ή
μεμονωμένες εντολές σε σώματα μεθόδων, είναι προτιμότερο να
χρησιμοποιήσετε απευθείας τη βιβλιοθήκη nikic/php-parser
.
Χειριστής τάξης
Η κλάση ClassManipulator παρέχει εργαλεία για το χειρισμό κλάσεων.
Η μέθοδος inheritMethod()
αντιγράφει μια μέθοδο από μια γονική κλάση
ή μια διεπαφή που έχει υλοποιηθεί στην κλάση σας. Αυτό σας επιτρέπει να
υπερεκτελείτε τη μέθοδο ή να επεκτείνετε την υπογραφή της:
Η μέθοδος inheritProperty()
αντιγράφει μια ιδιότητα από μια γονική
κλάση στην κλάση σας. Αυτό είναι χρήσιμο όταν θέλετε να έχετε την ίδια
ιδιότητα στην κλάση σας, αλλά ενδεχομένως με διαφορετική
προεπιλεγμένη τιμή:
Η μέθοδος implement()
υλοποιεί αυτόματα όλες τις μεθόδους και τις
ιδιότητες της δεδομένης διεπαφής ή αφηρημένης κλάσης:
Μεταβλητές Dumper
Ο Dumper επιστρέφει μια αναλύσιμη αναπαράσταση συμβολοσειράς PHP μιας
μεταβλητής. Παρέχει καλύτερη και σαφέστερη έξοδο από την εγγενή
συνάρτηση var_export()
.
Πίνακας συμβατότητας
Το PhpGenerator 4.1 είναι συμβατό με την PHP 8.0 έως 8.4.