Kódolási szabvány
Ez a dokumentum leírja a Nette fejlesztésére vonatkozó szabályokat és ajánlásokat. Amikor kódot járulsz hozzá a Nette-hez, be kell tartanod őket. Ennek legegyszerűbb módja a meglévő kód utánzása. A lényeg az, hogy minden kód úgy nézzen ki, mintha egyetlen ember írta volna.
A Nette Kódolási Szabvány megfelel a PSR-12 Extended Coding Style-nak, két fő kivétellel: a behúzáshoz tabulátorokat használ szóközök helyett, és az osztály konstansokhoz PascalCase-t használ.
Általános szabályok
- Minden PHP fájlnak tartalmaznia kell a
declare(strict_types=1)deklarációt. - Két üres sort használunk a metódusok elválasztására a jobb olvashatóság érdekében.
- A shut-up operátor használatának okát dokumentálni kell:
@mkdir($dir); // @ - a könyvtár létezhet. - Ha gyengén típusos összehasonlító operátort használunk (pl.
==,!=, …), a szándékot dokumentálni kell:// == elfogadja a null-t - Egy
exceptions.phpfájlba több kivételt is írhatsz. - Az interfészeknél nem adjuk meg a metódusok láthatóságát, mivel azok mindig public-ok.
- Minden property-nek, visszatérési értéknek és paraméternek meg kell adni a típusát. Ezzel szemben a final konstansoknál soha nem adjuk meg a típust, mert az nyilvánvaló.
- A stringek határolására aposztrófokat kell használni, kivéve, ha maga a literál tartalmaz aposztrófokat.
Elnevezési konvenciók
- Ne használj rövidítéseket, hacsak a teljes név nem túl hosszú.
- Kétbetűs rövidítéseknél használj nagybetűket, hosszabb rövidítéseknél pascal/camel case-t.
- Az osztály nevéhez használj főnevet vagy szókapcsolatot.
- Az osztályneveknek nemcsak a specifikusságot (
Array), hanem az általánosságot (ArrayIterator) is tartalmazniuk kell. Kivételt képeznek a PHP nyelvi attribútumok. - Az osztály konstansoknak és enumoknak PascalCaps-t kell használniuk.
- Az interfészeknek és absztrakt osztályoknak nem szabad előtagokat vagy utótagokat tartalmazniuk, mint például
Abstract,InterfacevagyI.
Tördelés és zárójelek
A Nette Kódolási Szabvány megfelel a PSR-12-nek (illetve a PER Coding Style-nak), néhány pontban kiegészíti vagy módosítja azt:
- az arrow függvényeket szóköz nélkül írjuk a zárójel előtt, azaz
fn($a) => $b - nem szükséges üres sor a különböző típusú
useimport utasítások között - a függvény/metódus visszatérési típusa és a nyitó kapcsos zárójel mindig külön sorokban vannak:
public function find( string $dir, array $options, ): array { // metódus törzse } A nyitó kapcsos zárójel külön sorban fontos a függvény/metódus szignatúrájának és törzsének vizuális elválasztásához. Ha a szignatúra egy sorban van, az elválasztás egyértelmű (bal oldali kép), ha több sorban van, a PSR-ben a szignatúra és a törzs egybefolyik (középen), míg a Nette szabványban továbbra is elkülönülnek (jobbra):

Dokumentációs blokkok (phpDoc)
Fő szabály: Soha ne duplikálj semmilyen információt a szignatúrában, mint például a paraméter típusa vagy a visszatérési típus, hozzáadott érték nélkül.
Dokumentációs blokk egy osztály definíciójához:
- Az osztály leírásával kezdődik.
- Üres sor következik.
- Az
@property(vagy@property-read,@property-write) annotációk következnek, egymás után. Szintaxis: annotáció, szóköz, típus, szóköz, $név. - Az
@methodannotációk következnek, egymás után. Szintaxis: annotáció, szóköz, visszatérési típus, szóköz, név(típus $param, …). - Az
@authorannotációt kihagyjuk. A szerzőiséget a forráskód története őrzi meg. - Használhatók az
@internalvagy@deprecatedannotációk.
/** * MIME üzenet rész. * * @property string $encoding * @property-read array $headers * @method string getSomething(string $name) * @method static bool isEnabled() */ Egy property dokumentációs blokkja, amely csak az @var annotációt tartalmazza, egysoros legyen:
/** @var string[] */ private array $name; Dokumentációs blokk egy metódus definíciójához:
- Rövid metódusleírással kezdődik.
- Nincs üres sor.
- Az
@paramannotációk külön sorokban. - Az
@returnannotáció. - Az
@throwsannotációk, egymás után. - Használhatók az
@internalvagy@deprecatedannotációk.
Minden annotációt egy szóköz követ, kivéve az @param-ot, amelyet a jobb olvashatóság érdekében két szóköz követ.
/** * Fájlt keres egy könyvtárban. * @param string[] $options * @return string[] * @throws DirectoryNotFoundException */ public function find(string $dir, array $options): array Tabulátorok szóközök helyett
A tabulátoroknak számos előnyük van a szóközökkel szemben:
- a behúzás mérete a szerkesztőkben és a weben testreszabható
- nem erőltetik a kódra a felhasználó behúzásméret-preferenciáját, így a kód jobban hordozható
- egyetlen billentyűleütéssel írhatók (bárhol, nem csak azokban a szerkesztőkben, amelyek a tabulátorokat szóközökre cserélik)
- a behúzás a céljuk
- tiszteletben tartják a látássérült és vak kollégák igényeit
A tabulátorok használatával projektjeinkben lehetővé tesszük a szélesség testreszabását, ami a legtöbb ember számára feleslegesnek tűnhet, de a látássérültek számára elengedhetetlen.
A Braille-kijelzőket használó vak programozók számára minden szóköz egy Braille-cellát jelent. Tehát ha az alapértelmezett behúzás 4 szóköz, a 3. szintű behúzás 12 értékes Braille-cellát pazarol el még a kód kezdete előtt. Egy 40 cellás kijelzőn, amelyet a laptopoknál leggyakrabban használnak, ez a rendelkezésre álló cellák több mint negyede, amelyet információ nélkül pazarolnak el.