Kiemelt kép

PHP 8 újdonságok III.: attribútumok

A PHP fejlesztőcsapata már egy ideje dolgozik a PHP következő főverzióján, a PHP 8.0-n, amely 2020. november 26-án fog megjelenni a tervek szerint és már túl vagyunk az első RC verzión is. Ebben a posztsorozatban meg fogjuk nézni, hogy milyen főbb változások és új nyelvi elemek érkeznek a PHP-ba. Az előző posztokban a match expressionről és a típusosságról volt szó, most pedig egy teljesen új nyelvi elemről, az attribútumokról lesz szó.

Az attribútumok/annotációk nem teljesen új dolgok, más nyelvek, mint például a Java is alkalmazza és alapvetően metainformációk megadására szolgál. A PHP-ban eddig erre a PHPDoc annotációkat lehetett használni és többek között a Doctrine ORM és a Symfony keretrendszer is erőszeretettel használta.

Mire jó az attribútum?

Az attribútumok feladata az, hogy különböző metaadatokat tudjuk megadni osztályokhoz, metódusokhoz és változókhoz. Egyik legegyszerűbb példa, hogy megadunk egy Deprecated attribútumot, amellyel azt jelöljük, hogy egy osztály vagy annak egy eleme már elavult és helyette mást kellene használni. 

A PHP (egyelőre) nem érkezik semmilyen beépített attribútummal, de pl. RFC indult a fent említett Deprecated bevezetésére. Ettől függetlenül többek között a Symfony új verziója is alapból támogatni fogja az attribútumok használatát az eddigi PHPDoc annotációk helyett.

Hogyan használhatjuk?

A szintaxis a PHP internals levelezőlistán komoly vitákat váltott ki, hiszen leginkább a @Attribute az ismert szintaxis, de ez a PHP-ban nem volt lehetséges. Számtalan verzió napvilágot látott, de végül a #[Attribute] szintaxis nyert, amelynek az egyik legnagyobb előnye, hogy (ha azt egy keretrendszer támogatja) akkor akár már a PHP7-ben is alkalmazhatjuk, bizonyos limitek árán, hiszen ott ez valid megjegyzést eredményez a kódban. 

Nézzünk egy Symfony példát a valós környezetében:

Az attribútumok neve mellett zárójelben megadjuk az értékét, jelen esetben az útvonalat, illetve nevesített paraméterekkel további információkat adhatunk meg, pl. az útvonalunk nevét. 

Hozzunk létre egyet!

Természetesen létre is hozhatunk attribútumokat, amelyek annyiban térnek el a normál osztályoktól, hogy egy #[Attribute] attribútumot kell megadni, ezzel jelezzük, hogy ez valójában nem egy sima osztály.

A fenti kód létrehoz egy Deprecated attribútumot, aminek értékként átadhatunk valamilyen megjegyzést. Használat közben pedig így néz ki:

#[Deprecated(’Ezt már ne használd!’)]

Ha pedig valahol le akarjuk kérdezni, hogy egy osztály rendelkezik-e ezzel az általunk létrehozott Deprecated jelöléssel, akkor egyszerűen Reflection-ből ki lehet szedni ezt az információt.

Természetesen ez egy nagyon alap példa, hiszen opcionális paramétereket és különböző beállításokat lehet megadni. Azt is be lehet állítani, hogy milyen helyzetben (osztály, változó, stb.) akarjuk használni, illetve megadható-e többször egymás után.

Összességében az attribútumok bevezetése egy nagy előrelépés a PHP életében és új lehetőségeket/megoldásokat eredményezhet. Egyes esetekben időt spórolhat nekünk a fejlesztés során, illetve a régi megjegyzések között használt annotációkat is kiváltja. 


Ha nem szeretnél lemaradni a hasonló posztokról, kövesd a blog Facebook oldalát!