Generator kode PHP
- Podpira vse najnovejše funkcije PHP (kot so kavlji za lastnosti, enumi, atributi itd.)
- Omogoča enostavno spreminjanje obstoječih razredov
- Izhod je skladen s slogom kodiranja PSR-12 / PER
- Zrela, stabilna in široko uporabljena knjižnica
Namestitev
Prenesite in namestite paket s programom Composer:
Za združljivost s PHP glejte tabelo.
Razredi
Začnimo z enostavnim primerom generiranja razreda z uporabo ClassType:
Rezultat bo naslednji:
Za generiranje kode lahko uporabimo tudi tiskalnik, ki ga bomo za razliko od echo $class
lahko dodatno konfigurirali:
Dodamo lahko konstante (razred Constant) in lastnosti (razred Property):
Ustvari se:
In lahko dodamo metode:
Rezultat je:
Konstruktorju se lahko posredujejo promovirani parametri, ki jih je uvedel PHP 8.0:
Rezultat je:
Lastnosti in razrede, ki so namenjeni samo branju, lahko označite s spletno stranjo setReadOnly()
.
Če dodana lastnost, konstanta, metoda ali parameter že obstajajo, se vrže izjema.
Člane lahko odstranite z uporabo removeProperty()
, removeConstant()
, removeMethod()
ali removeParameter()
.
Razredu lahko dodate tudi obstoječe predmete Method
, Property
ali Constant
:
Obstoječe metode, lastnosti in konstante lahko klonirate z drugim imenom z uporabo cloneWithName()
:
Vmesnik ali lastnost
Ustvarite lahko vmesnike in lastnosti (razreda InterfaceType in TraitType):
Uporaba lastnosti:
Rezultat:
Enumi
Enostavno lahko ustvarite enume, ki jih prinaša PHP 8.1 (razred EnumType):
Rezultat:
Za ustvarjanje podprtega enuma lahko določite tudi skalarne ekvivalente za primere:
Vsakemu primeru je mogoče dodati komentar ali atribute z uporabo addComment()
ali
addAttribute()
.
Anonimni razred
Kot ime dajte null
in dobili boste anonimni razred:
Rezultat:
Globalna funkcija
Koda funkcije bo ustvarila razred GlobalFunction:
Rezultat:
Zaprtje
Koda zaprtja bo ustvarila razred Closure:
Rezultat:
Funkcija puščice
Zaključek lahko natisnete tudi s tiskalnikom kot funkcijo puščice:
Rezultat:
Podpis metode in funkcije
Metode so predstavljene z razredom Method. Nastavite lahko vidnost, povratno vrednost, dodate komentarje, atribute itd:
Vsak parameter je predstavljen z razredom Parameter. Spet lahko nastavite vse možne lastnosti:
Za določitev tako imenovanih parametrov variadics (ali tudi operatorjev splat, spread, elipsis, unpacking ali tri pike)
uporabite setVariadic()
:
Generira:
Metoda in telo funkcije
Telo lahko metodi setBody()
posredujete naenkrat ali zaporedno (vrstico za vrstico) z večkratnim klicem
addBody()
:
Rezultat
Za priročen način injiciranja spremenljivk lahko uporabite posebna nadomestna imena.
Enostavna nadomestna imena ?
Rezultat:
Variadični nosilec mesta ...?
Rezultat:
Poimenovane parametre PHP 8 lahko uporabite tudi z uporabo nadomestnega imena ...?:
Namestno znamenje pobegnite s poševnico \?
Rezultat:
Tiskalniki in skladnost s predpisi PSR
Razred Printer se uporablja za ustvarjanje kode PHP:
Ustvarja lahko kodo za vse druge elemente in ponuja metode, kot so printFunction()
,
printNamespace()
itd.
Poleg tega je na voljo razred PsrPrinter
, katerega izpis je v skladu s slogom kodiranja PSR-2 / PSR-12
/ PER:
Potrebujete natančno prilagoditi obnašanje svojim potrebam? Ustvarite svoj tiskalnik tako, da podedujete razred
Printer
. Te spremenljivke lahko ponovno konfigurirate:
Kako in zakaj natančno se razlikujeta standardna Printer
in PsrPrinter
? Zakaj v paketu ni samo
enega tiskalnika, PsrPrinter
, ki bi se razlikoval?
Standardni Printer
oblikuje kodo tako, kot jo oblikujemo v celotnem sistemu Nette. Ker je Nette nastal veliko
prej kot PSR in tudi zato, ker PSR dolga leta ni pravočasno dostavljal standardov, temveč včasih celo z večletno zamudo od
uvedbe nove funkcije v PHP, je to povzročilo nekaj manjših razlik v standardu kodiranja. Večja razlika je le uporaba tabulatorjev
namesto presledkov. Vemo, da z uporabo tabulatorjev v naših projektih omogočamo prilagajanje širine, kar je bistvenega pomena za ljudi z okvarami
vida. Primer manjše razlike je postavitev oglatega oklepaja v ločeno vrstico za funkcije in metode ter vedno. Priporočilo
PSR se nam zdi nelogično in vodi
k zmanjšanju jasnosti kode.
Tipi
Vsak tip ali tip zveze/intersekcije je mogoče posredovati kot niz, uporabite lahko tudi vnaprej določene konstante za domače tipe:
Enako velja za metodo setReturnType()
.
Literali
S Literal
lahko poljubno kodo PHP posredujete na primer privzetim vrednostim lastnosti ali parametrov itd:
Rezultat:
Rezultat: Na naslov Literal
lahko posredujete tudi parametre, ki se s posebnimi nadomestki oblikujejo v veljavno PHP kodo:
Literal, ki predstavlja ustvarjanje novega predmeta, se enostavno ustvari z metodo new
:
Atributi
Vsem razredom, metodam, lastnostim, konstantam, imenskim primerom, funkcijam, zaključkom in parametrom lahko dodate atribute PHP 8. Kot vrednosti parametrov lahko uporabite tudi literale.
Rezultat:
Kljuke za lastnino
Opredelite lahko tudi lastnostne kljuke (ki jih predstavlja razred PropertyHook) za operacije get in set, kar je funkcija, uvedena v PHP 8.4:
To generira:
Lastnosti in kavlji so lahko abstraktni ali končni:
Asimetrična vidljivost
PHP 8.4 uvaja asimetrično vidnost lastnosti. Nastavite lahko različne ravni dostopa za branje in pisanje.
Vidnost lahko nastavite z metodo setVisibility()
z dvema parametroma ali z uporabo metod
setPublic()
, setProtected()
ali setPrivate()
s parametrom mode
, ki določa,
ali vidnost velja za pridobivanje ali nastavljanje lastnosti. Privzet način je 'get'
.
Pri tem se ustvari:
Imenski prostor
Razrede, lastnosti, vmesnike in enume (v nadaljevanju razredi) lahko združimo v imenski prostor (PhpNamespace):
Če razred že obstaja, se vrže izjema.
Določite lahko izjave o uporabi:
Če želite poenostaviti polno kvalificirano ime razreda, funkcije ali konstante v skladu z opredeljenimi vzdevki, uporabite
metodo simplifyName
:
Poenostavljeno ime razreda, funkcije ali konstante pa lahko pretvorite v polno kvalificirano ime z uporabo metode
resolveName
:
Razreševanje imen razredov
Ko je razred del imenskega prostora, se prikaže nekoliko drugače: vsi tipi (npr. namigi na tip, tipi vrnitve, ime nadrejenega razreda, implementirani vmesniki, uporabljene lastnosti in atributi) se samodejno razrešijo (razen če to izklopite, glejte spodaj). To pomeni, da morate v definicijah uporabljati polno kvalificirana imena razredov, ki bodo v dobljeni kodi nadomeščena s približki (na podlagi klavzul use) ali polno kvalificiranimi imeni:
Rezultat:
Na ta način je mogoče izklopiti samodejno reševanje:
Datoteke PHP
Razrede, funkcije in prostore imen lahko združite v datoteke PHP, ki jih predstavlja razred PhpFile:
Rezultat:
Upoštevajte: V datoteke ni mogoče dodajati dodatne kode zunaj funkcij in razredov.
Ustvarjanje glede na obstoječe
Poleg tega, da lahko razrede in funkcije modelirate z uporabo zgoraj opisanega API-ja, jih lahko tudi samodejno generirate na podlagi obstoječih:
Privzeto so telesa funkcij in metod prazna. Če jih želite tudi naložiti, uporabite ta način (zahteva namestitev spletne
strani nikic/php-parser
):
Nalaganje iz datoteke PHP
Funkcije, razrede, vmesnike in enume lahko naložite tudi neposredno iz niza kode PHP. Tako na primer ustvarimo objekt
ClassType
:
Pri nalaganju razredov iz kode PHP se enovrstični komentarji zunaj teles metod ne upoštevajo (npr. za lastnosti itd.), ker ta knjižnica nima API za delo z njimi.
Neposredno lahko naložite tudi celotno datoteko PHP, ki lahko vsebuje poljubno število razredov, funkcij ali celo več imenskih prostorov:
Prav tako se naložita začetni komentar datoteke in deklaracija strict_types
. Po drugi strani pa se vsa druga
globalna koda ne upošteva.
Za to je treba namestiti nikic/php-parser
.
Če morate upravljati globalno kodo v datotekah ali posamezne stavke v telesih metod, je bolje, da neposredno
uporabite knjižnico nikic/php-parser
.
Manipulator razreda
Razred ClassManipulator ponuja orodja za manipulacijo z razredi.
Metoda inheritMethod()
kopira metodo iz nadrejenega razreda ali implementiranega vmesnika v vaš razred. To vam
omogoča, da metodo prekrijete ali razširite njen podpis:
Metoda inheritProperty()
kopira lastnost iz nadrejenega razreda v vaš razred. To je uporabno, kadar želite
imeti isto lastnost v svojem razredu, vendar po možnosti z drugo privzeto vrednostjo:
Metoda implement()
samodejno implementira vse metode in lastnosti danega vmesnika ali abstraktnega razreda:
Zbiralnik spremenljivk
Dumper vrne razčlenljiv niz PHP za predstavitev spremenljivke. Zagotavlja boljši in jasnejši izpis kot nativna funkcija
var_export()
.
Preglednica združljivosti
PhpGenerator 4.1 je združljiv s PHP 8.0 do 8.4.