PHP kód generátor
- Támogatja az összes legújabb PHP funkciót (mint például a property hooks, enums, attribútumok, stb.)
- Lehetővé teszi a meglévő osztályok egyszerű módosítását
- PSR-12 / PER kódolási stílusnak megfelelő kimenet
- Kiforrott, stabil és széles körben használt könyvtár
Telepítés
Töltse le és telepítse a csomagot a Composer segítségével:
A PHP-kompatibilitásról lásd a táblázatot.
Osztályok
Kezdjük egy egyszerű példával az osztály generálására a ClassType használatával:
A következő eredményt adja ki:
A kód generálásához használhatunk nyomtatót is, amelyet a echo $class
címmel ellentétben tovább konfigurálhatunk:
Konstanciákat (class Constant) és tulajdonságokat (class Property) adhatunk hozzá:
Ez generálja:
És hozzáadhatunk metódusokat:
Ez a következőket eredményezi:
A PHP 8.0 által bevezetett támogatott paraméterek átadhatók a konstruktornak:
Ez a következőket eredményezi:
A csak olvasható tulajdonságok és osztályok a setReadOnly()
címen keresztül jelölhetők meg.
Ha a hozzáadott tulajdonság, konstans, metódus vagy paraméter már létezik, akkor kivételt dob.
A tagok eltávolítása a removeProperty()
, removeConstant()
, removeMethod()
vagy a
removeParameter()
segítségével történhet.
A már létező Method
, Property
vagy Constant
objektumokat is hozzáadhatja az
osztályhoz:
A meglévő metódusokat, tulajdonságokat és konstansokat más névvel klónozhatja a cloneWithName()
segítségével:
Interface vagy Trait
Interfészeket és tulajdonságokat hozhat létre ( InterfaceType és TraitType osztályok):
Vonások használata:
Eredmény:
Enums
A PHP 8.1 által hozott enumokat ( EnumType osztály) könnyen létrehozhatod:
Eredmény:
Az esetek skaláris megfelelőit is definiálhatja, hogy létrehozzon egy támogatott enumot:
A addComment()
vagy a addAttribute()
segítségével minden egyes esethez hozzáadhatunk egy
megjegyzést vagy attribútumokat.
Névtelen osztály
Adjuk meg a null
nevet, és máris van egy névtelen osztályunk:
Eredmény:
Globális funkció
A függvények kódja létrehozza a GlobalFunction osztályt:
Eredmény:
Zárás
A lezárások kódja a Closure osztályt fogja létrehozni:
Eredmény:
Nyíl funkció
A lezárást nyíl funkcióként is kinyomtathatja a nyomtató segítségével:
Eredmény:
Módszer és funkció aláírása
A metódusokat a Method osztály képviseli. Beállíthatja a láthatóságot, a visszatérési értéket, megjegyzéseket, attribútumokat stb. adhat hozzá:
Minden paramétert egy Parameter osztály képvisel. Ismét minden elképzelhető tulajdonságot beállíthat:
Az úgynevezett variadics paraméterek (vagy akár a splat, spread, ellipszis, kipakolás vagy a három pont operátor)
definiálásához használja a setVariadic()
:
Generates:
Módszer és funkciótest
A test átadható a setBody()
metódusnak egyszerre vagy szekvenciálisan (soronként) a addBody()
ismételt hívásával:
Eredmény
Speciális helyőrzőket használhat a változók befecskendezésének praktikus módjához.
Egyszerű helytartók ?
Eredmény:
Variadic placeholder ...?
Eredmény:
A PHP 8 névvel ellátott paramétereket is használhatja a helyőrző használatával. ...?:
Helytartó szláv segítségével menekülhet \?
Eredmény:
Nyomtatók és PSR-megfelelőség
A Printer osztály PHP kód generálására szolgál:
Minden más elemhez képes kódot generálni, és olyan módszereket kínál, mint a printFunction()
,
printNamespace()
, stb.
Ezenkívül rendelkezésre áll a PsrPrinter
osztály, amelynek kimenete megfelel a PSR-2 / PSR-12 / PER
kódolási stílusnak:
Szüksége van a viselkedés finomhangolására az Ön igényei szerint? Hozzon létre saját nyomtatót a Printer
osztály öröklésével. Ezeket a változókat átkonfigurálhatja:
Miben és miért különbözik pontosan a szabványos Printer
és a PsrPrinter
? Miért nincs csak egy
nyomtató, a PsrPrinter
, a csomagban?
A szabványos Printer
úgy formázza a kódot, ahogyan azt az egész Nette-ben tesszük. Mivel a Nette sokkal
korábban készült, mint a PSR, és mivel a PSR sok éven át nem időben, hanem néha akár több éves késéssel szállította
a szabványokat egy-egy új funkció bevezetésétől a PHP-ben, ez néhány kisebb eltérést eredményezett a kódolási szabványban. A nagyobb különbség csupán a
tabulátorok használata a szóközök helyett. Tudjuk, hogy a tabulátorok használatával a projektjeinkben lehetővé tesszük
a szélesség beállítását, ami a látássérült emberek számára
elengedhetetlen. Egy példa a kisebb különbségre a függvények és metódusok esetében a görbe zárójel külön sorba
helyezése és mindig. A PSR ajánlását logikátlannak látjuk, és a kód áttekinthetőségének csökkenéséhez
vezet.
Típusok
Minden típus vagy union/intersection típus átadható stringként, a natív típusokhoz előre definiált konstansokat is használhat:
Ugyanez vonatkozik a setReturnType()
módszerre is.
Literálisok
A Literal
segítségével tetszőleges PHP kódot adhat át, például alapértelmezett tulajdonság vagy
paraméter értékeket stb:
Eredmény:
A Literal
oldalnak paramétereket is átadhat, és azt speciális
helyőrzőket használva érvényes PHP-kóddá formázhatja:
Az új objektum létrehozását jelképező literál a new
módszerrel könnyen létrehozható:
Attribútumok
A PHP 8 attribútumokat minden osztályhoz, metódushoz, tulajdonsághoz, konstanshoz, enum esetekhez, függvényekhez, lezárásokhoz és paraméterekhez hozzáadhatja. Irodalmi karakterek is használhatók paraméterértékként.
Eredmény:
Ingatlan horgok
A PHP 8.4-ben bevezetett funkció, a PropertyHook osztály által képviselt PropertyHook horgok is definiálhatók a get és set műveletekhez:
Ez generálja:
Tulajdonságok és tulajdonsághorgok lehetnek absztraktak vagy véglegesek:
Aszimmetrikus láthatóság
A PHP 8.4 bevezeti a tulajdonságok aszimmetrikus láthatóságát. Különböző hozzáférési szinteket állíthat be az olvasáshoz és az íráshoz.
A láthatóságot vagy a setVisibility()
metódussal lehet beállítani két paraméterrel, vagy a
setPublic()
, setProtected()
vagy setPrivate()
metódussal a mode
paraméterrel, amely megadja, hogy a láthatóság a tulajdonság megszerzésére vagy beállítására vonatkozik-e a
tulajdonság. Az alapértelmezett mód a 'get'
.
Ez generálja:
Namespace
Az osztályok, tulajdonságok, interfészek és enumok (a továbbiakban osztályok) névterekbe (PhpNamespace) csoportosíthatók:
Ha az osztály már létezik, akkor kivételt dob.
Használati utasításokat definiálhat:
A simplifyName
módszerrel egyszerűsíthet egy teljesen minősített osztály-, függvény- vagy konstansnevet a
definiált aliasoknak megfelelően:
Ezzel szemben az egyszerűsített osztály-, függvény- vagy konstansnevet a resolveName
módszerrel alakíthatja
át teljes minősítésűvé:
Osztálynevek feloldása
Ha egy osztály egy névtér része, akkor kissé másképp jelenik meg: minden típus (pl. a típushivatkozások, visszatérési típusok, szülőosztály neve, implementált interfészek, használt tulajdonságok és attribútumok) automatikusan feloldódik (hacsak ki nem kapcsolod, lásd alább). Ez azt jelenti, hogy a definíciókban teljesen minősített osztályneveket kell használnia, és ezek helyébe aliasok (a használati záradékok alapján) vagy teljesen minősített nevek lépnek az eredményül kapott kódban:
Eredmény:
Az automatikus feloldás így kikapcsolható:
PHP Fájlok
Az osztályok, függvények és névterek PHP fájlokba csoportosíthatók, amelyeket a PhpFile osztály képvisel:
Eredmény:
Figyelem: A függvényeken és osztályokon kívül nem lehet további kódot hozzáadni a fájlokhoz.
A meglévők szerint generálva
Amellett, hogy az osztályokat és függvényeket a fent leírt API segítségével modellezhetjük, lehetőségünk van arra is, hogy automatikusan generáljuk őket a meglévők alapján:
A függvény- és metódustestek alapértelmezés szerint üresek. Ha ezeket is be akarja tölteni, használja ezt a módszert
(ehhez a nikic/php-parser
oldal telepítése szükséges):
Betöltés PHP fájlból
A függvényeket, osztályokat, interfészeket és enumokat közvetlenül egy PHP kódsorozatból is betöltheti. Például
így hozzuk létre a ClassType
objektumot:
Az osztályok PHP kódból történő betöltésekor a metódus testén kívüli egysoros megjegyzéseket figyelmen kívül hagyjuk (pl. tulajdonságok stb. esetén), mivel ez a könyvtár nem rendelkezik API-val ezek kezelésére.
A teljes PHP-fájlt közvetlenül is betöltheti, amely tetszőleges számú osztályt, függvényt vagy akár több névteret is tartalmazhat:
A kezdeti fájlkommentár és a strict_types
nyilatkozat is betöltődik. Másrészt minden más globális kódot
figyelmen kívül hagyunk.
Ehhez telepíteni kell a nikic/php-parser
oldalt.
Ha fájlokban lévő globális kódot vagy a metódusok testében lévő egyes utasításokat kell manipulálnia,
jobb, ha közvetlenül a nikic/php-parser
könyvtárat használja.
Osztály Manipulátor
A ClassManipulator osztály eszközöket biztosít az osztályok manipulálásához.
A inheritMethod()
metódus egy metódust másol át egy szülő osztályból vagy egy implementált interfészből
az osztályodba. Ez lehetővé teszi a metódus felülírását vagy a szignatúrájának kiterjesztését:
A inheritProperty()
metódus egy tulajdonságot másol át egy szülő osztályból az Ön osztályába. Ez akkor
hasznos, ha ugyanazt a tulajdonságot szeretné az osztályában, de esetleg más alapértelmezett értékkel:
A implement()
módszer automatikusan megvalósítja az adott interfész vagy absztrakt osztály összes
metódusát és tulajdonságát:
Változók Dumper
A Dumper egy változó egy elemezhető PHP-string reprezentációját adja vissza. Jobb és egyértelműbb kimenetet
biztosít, mint a natív var_export()
függvény.
Kompatibilitási táblázat
A PhpGenerator 4.1 kompatibilis a PHP 8.0 és 8.4 között.